`
shumo
  • 浏览: 9601 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

1001

    博客分类:
  • acm
阅读更多
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>

#ifdef WIN32
typedef __int64 int64;
#else
typedef long long int64;
#endif

typedef struct _bignum {
	int64 data[0x20]; /* 默认分0x20段,每段5位 */
	int segsize; /* 实际段数 */
	int np; /* 小数位数 */
} Bignum;

typedef struct _intnum {
	int64 data;
	int np;
} Intnum;

void printBignum(Bignum *num);

void getInput(Intnum *num, int *exp) {
	char str[0x10];
	num->np = 0;
	if (scanf("%s%d", str, exp) == 2) {
		char c;
		int i = 0;
		/* calulate the little number...-__-|| */
		while((c = str[i++]) != '\0') {
			if (c == '.') {
				num->np = 6 - i;
				break;
			}
		}
		num->data = (int)(atof(str) * pow(10, num->np));
	}
}

void mul(Bignum a, Intnum b, Bignum *result) {
	int i;
	int64 overflow = 0;
	result->np = a.np + b.np;
	for (i=0;i<a.segsize;++i) {
		int64 inter = a.data[i] * b.data + overflow;
		overflow = inter / 100000;
		result->data[i] = inter % 100000;
	}
	while (overflow > 0) {
		result->data[i++] = overflow % 100000;
		overflow /= 100000;
	}
	result->segsize = i;
}

void power(Intnum base, int exp, Bignum *result) {
	int i;
	result->data[0] = 1;
	result->np = 0;
	result->segsize = 1;
	
	if (exp == 0) {
		result->data[0] = 0;
		result->np = 0;
		return;
	}
	
	for (i=0; i<exp; ++i) {		
		mul(*result, base, result);
	}
}

void printBignum(Bignum *num) {
	int i;
	int pointSeg;
	int pointOff = num->np % 5;
	char buffer[0x100] = {0};
	char *buffer_p = buffer;
	int offset = 0;
	
	if (num->np <= 0) {
		pointSeg = -1;
	} else {
		pointSeg = num->np / 5;
	}
	for (i=num->segsize; i<=pointSeg; ++i) {
		num->data[i] = 0;
		num->segsize++;
	}
	
	for (i=num->segsize-1; i>=0 ; i--) {
		if (i == pointSeg) {
			char buf[0x10] = {0};
			int j;
			sprintf(buf, "%05ld", num->data[i]);
			for (j=0; j<pointOff; j++) {
				buf[5-j] = buf[4-j];
			}
			buf[5-j] = '.';
			buf[6] = '\0';
			offset += sprintf(buffer + offset, "%s", buf);			
		} else {
			offset += sprintf(buffer + offset, "%05ld", num->data[i]);
		}
	}
		
	i = 0;
	while('0' == buffer[i++]) { ; }
	buffer_p = buffer + i - 1;
	
	if (num->np > 0) {		
		i = strlen(buffer) - 1;
		while('0' == buffer[i--]) { ; }
		if (buffer[i+1] == '.') {
			buffer[i+1] = '\0';
		} else {
			buffer[i+2] = '\0';
		}
	}
	printf("%s\n", buffer_p);
}

int main()
{
	int exp;
	Intnum source = {0};
	Bignum result = {0};
	
	getInput(&source, &exp);
	
	power(source, exp, &result);
	printBignum(&result);
	
	return 0;
}

 Wrong Answer, why?????

分享到:
评论

相关推荐

    HP 1001固网驱动

    标题中的“HP 1001固网驱动”指的是HP公司生产的型号为1001的网络打印服务器的驱动程序。HP(Hewlett-Packard)是一家全球知名的科技公司,其产品线涵盖打印机、计算机硬件等多个领域。在这个特定的情况下,我们关注...

    NST1001应用手册 1.0_NST1001_NST1001中文手册_nst1001手册_

    《NST1001应用手册 1.0》是针对NST1001这款接触式温度集成电路的专业开发指南,旨在为工程师和开发者提供详尽的技术资料和应用指导。这款手册结合了理论与实践,深入浅出地介绍了NST1001的各项功能特性,以及如何在...

    1001 bit tools 1.1.5 简体中文版

    《1001 Bit Tools 1.1.5:实用工具箱的全面解析》 在IT领域,一款全面且易用的工具集合软件是每个技术爱好者和专业人员的必备。"1001 Bit Tools 1.1.5 简体中文版"就是这样一款强大的工具集,它为用户提供了一系列...

    NST1001温度传感器使用例子.zip

    在本文中,我们将深入探讨如何在51单片机STC12C5A60S2上使用NST1001温度传感器进行数据采集。NST1001是一款常用的数字温度传感器,它能提供精确的温度测量值,并且与微控制器的接口简单,非常适合在各种嵌入式系统中...

    Decawave DWM1001硬件的简单 C 示例_C语言_代码_下载

    请注意,以下示例包含使用 DWM1001C 的 UWB 功能的非常基本的应用程序。 符合法规的 DWM1001C 高级固件可在https://www.decawave.com/product/dwm1001-module/上找到 概述 该项目包含 DWM1001 硬件及其衍生产品的 ...

    BARROT_BR1001_Datasheet_V1.3.pdf

    百瑞科技的BR1001是一款蓝牙SoC产品,它是一个针对2.4GHz蓝牙低功耗(BLE)无线微控制器应用的定制系统芯片(SoC)。BR1001集成了2.4GHz ISM频段射频收发器,用于无线连接,并且内部包含了一个单个低功耗32位RISC ...

    1001bit 建筑su插件sketchup中德天正

    1001bit Tools (1001bit 建筑工具集),1001bit_pro v2.1建模插件中文汉化版(比suapp还好用还全面的SketchUp插件,支持SketchUp8.0,2013,2014,2015) 可以自由添加减少要的图标,从此不再被各种各样眼花缭乱的插件所...

    驱动程序-打印机驱动-固网hp1001打印服务器驱动.zip

    本压缩包文件"驱动程序-打印机驱动-固网hp1001打印服务器驱动.zip"是专为固网hp1001打印服务器设计的驱动程序集合,旨在确保该打印服务器能够与电脑系统无缝协作。 固网hp1001打印服务器是一种网络打印解决方案,...

    1001序列检测器modelsim仿真和测试文件

    这里我们关注的是“1001序列检测器”,它是一种用于检测特定序列(在这种情况下可能是1001)的数字逻辑电路。模型模拟器(Modelsim)是一款广泛使用的仿真工具,特别适合于这样的任务。 首先,我们要理解序列检测器...

    IP1001_pdf

    IP1001是一款集成的物理层设备,适用于1000BASE-T、100BASE-TX和10BASE-T网络应用。这款设备支持多种媒体访问控制器(MAC)的接口,包括介质独立接口(MII)、千兆介质独立接口(GMII)和简化千兆介质独立接口...

    DWM1001原理图.pdf

    根据提供的文件信息,DWM1001原理图涉及到以下几个主要知识点: 1. DWM1001模块概述: DWM1001是Decawave公司开发的一款超宽带(Ultra Wideband,简称UWB)无线通信模块,适用于室内定位和追踪系统。该模块集成了...

    1001 bit pro 2.1中文for2014-2015

    "1001 bit pro 2.1中文for2014-2015"是一个软件产品,根据其标题和描述,我们可以推测这是一款专为2014至2015年设计的中文版专业软件。"1001 bit"可能是该软件系列或公司的名称,标签进一步确认了这一主题。尽管没有...

    IP1001数据手册

    《IP1001数据手册》是一份详细阐述IP1001硬件特性和应用的文档,对于硬件设计工程师来说,是进行相关产品开发的重要参考资料。这份手册包含了硬件设计的关键信息,如芯片封装、电气特性、接口定义以及操作指南等。...

    EXCEL VBA 范例应用大全1001例

    《EXCEL VBA 范例应用大全1001例》是一本全面介绍Excel VBA编程技术的实用教程,其特色在于提供了大量的实例,帮助读者深入理解和掌握VBA在Excel中的应用。这本书旨在帮助Excel用户提升工作效率,通过编写自定义宏和...

    dwm1001.pdf

    ### DWM1001模块概述 DWM1001模块是一款基于Decawave公司DW1000 Ultra Wideband (UWB) 收发器芯片的产品,它符合IEEE 802.15.4-2011 UWB标准。此模块集成了UWB天线、蓝牙天线、所有射频电路、Nordic Semiconductor ...

    HR1001C 增强型LLC控制器 自适应死区控制; 电容模式保护和 增强的电涌保护

    HR1001C是增强型LLC控制器 这提供了自适应的死区时间调整 (ADTA)和电容模式保护(CMP) 特性,以及功能上的改进 飙升的性能。 ADTA在两者之间插入了一个死区 互补门自动输出。这 是否通过保持输出关闭来确保 感应半桥...

    大麦盒子DM1001、DM1004降级图文教程

    ### 大麦盒子DM1001、DM1004降级图文教程 #### 前言 自从大麦盒子推出2.0UI系统以来,不少用户对新系统的使用体验表示不满。新版本系统中增加了许多广告,并且操作变得更加复杂。此外,系统自带的后台功能还可能将...

    TDT 1001-2012 地籍调查规程.zip

    《TDT 1001-2012地籍调查规程》是中国土地调查领域的标准规范,它详细规定了地籍调查的全过程,包括调查的原则、方法、程序、技术要求和成果管理等内容。这一规程对我国的土地管理和规划具有重要的指导意义,确保了...

    sketchup 1001插件,2014-15汉化版

    sketchup 1001插件,2014-15汉化版,自用没有问题sketchup 1001插件,2014-15汉化版,自用没有问题sketchup 1001插件,2014-15汉化版,自用没有问题sketchup 1001插件,2014-15汉化版,自用没有问题sketchup 1001...

Global site tag (gtag.js) - Google Analytics