博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU 1063 Exponentiation
阅读量:5309 次
发布时间:2019-06-14

本文共 1834 字,大约阅读时间需要 6 分钟。

求N个大数的乘积

题目要求很清楚,就是要注意的点太多了。

数据:95.123 12 0.4321 20 5.1234 15 6.7592 9 98.999 10 1.0100 12 在做题的时候把dig想成了小数点后没用的0,一直做不出正确结果

程序优化了两个大数的乘法的代码,不用考虑数的位数循环边界直接在最大的地方,少写了2行。

n为0时输出1。

输出时为了不输出没用的0,设两个变量l,h,l指前面第一个不为0的位数,h指后面第一个不为0的位数

上代码

1 #include 
2 #include
3 #include
4 using namespace std; 5 const int N=205; 6 int main() { 7 int a[N],b[N],c[N]; 8 char s[N]; 9 int n,l,h,p;10 freopen("C:\\CODE\\in.txt", "r", stdin);11 // freopen("C:\\CODE\\out.txt","w",stdout);12 while(~scanf("%s%d",s,&n)) {13 memset(a,0,sizeof(a));14 memset(b,0,sizeof(b));15 memset(c,0,sizeof(c));16 b[0]=1;17 int ii=0,dig=0;18 for(int i=5; i>=0; i--)19 if(s[i]!='.')20 a[ii++]=s[i]-'0';21 for(int i=strlen(s)-1; s[i]!='.'; i--) {22 if(s[i]=='.')23 break;24 dig++;25 }26 27 //printf("***********dig = %d\n",dig);28 29 p=0;30 for(int i=0; i
9) {49 c[i+1]+=c[i]/10;50 c[i]%=10;51 }52 53 }54 55 for(int i=0; i
=0; i--)68 if(b[i]) {69 h=i;70 break;71 }72 //输出73 dig=n*dig-1;74 if(dig>=h) {75 putchar('.');76 for(int i=dig; i>=l; i--) {77 printf("%d",b[i]);78 }79 putchar('\n');80 } else if(dig
dig; i--) {82 printf("%d",b[i]);83 }84 putchar('\n');85 } else {86 for(int i=h; i>=l; i--) {87 if(i==dig)88 putchar('.');89 printf("%d",b[i]);90 }91 putchar('\n');92 }93 94 }95 return 0;96 }

 

转载于:https://www.cnblogs.com/livelihao/p/5160898.html

你可能感兴趣的文章
选假球的故事
查看>>
ul li剧中对齐
查看>>
关于 linux 的 limit 的设置
查看>>
模块搜索路径
查看>>
如何成为一名优秀的程序员?
查看>>
HDU(4528),BFS,2013腾讯编程马拉松初赛第五场(3月25日)
查看>>
C++期中考试
查看>>
Working with Characters and Strings(Chapter 2 of Windows Via C/C++)
查看>>
vim中文帮助教程
查看>>
Android 创建与解析XML(四)—— Pull方式
查看>>
CodeForces 411B 手速题
查看>>
同比和环比
查看>>
美国在抛弃慕课,中国却趋之若鹜
查看>>
SpringMvc拦截器运行原理。
查看>>
MySQL基础3
查看>>
云计算数据与信息安全防护
查看>>
全局设置导航栏
查看>>
FTP客户端配置2
查看>>
RxJS & Angular
查看>>
面向对象(多异常的声明与处理)
查看>>