高精度减法

【题目描述】

输入两个正整数(最多 1000 位),输出它们的差。 

【输入】

两行,两个整数

【输出】

一行,一个整数

【样例输入】

999

1000

【样例输出】

-1

=============================题解===============================

高精度减法。

先将两数以字符串的形式存储,再比较减数与被减数的大小,以便确定结果的正负。具体的:先比较两数位数,若相同,再比较各位。此处可封装为函数,传入两个字符串。

将两数由字符串用int数组倒序存储每一位,再用较长一数的位数作为循环终止条件一次性将每位相减。接下来再遍历得数数组,若某一位小于零,则将上一位减1,这一位加10。

最后去除前导零,正序输出即可。


关于c++高精度小数减法的问题,帮忙看一下代码的问题

08-28

程序主要 运用数组录入两个大数(小数)进行减法运算输出结果,这是我根据大整数减法代码修改的代码,用来进行小数的运算。测试时大数减小数没有问题,小数减大数结果为负时,计算结果就会出现错误。求帮忙指出错误或者修改,如果有更好的完整代码也可以!比较急,谢谢rn[code=c]#include rn#include rntypedef struct rnrn int a[400];rn int b[400];rnNUM;rnvoid format_num(NUM *n, char *str)rnrn char *p_dot=NULL;rn char *p;rn int i=0;rn memset(n,0,sizeof(*n));//0,krn for(p=str; *p;p++)rn if(*p=='.') break;rn if(*p)p_dot = p;rn p--;rn while(p>=str)rn rn n->a[i++] = *p-- - '0';rn rn p=p_dot;rn if(p==NULL) return;rn i=0;rn p++;rn while(*p)rn n->b[i++] = *p++ - '0';rnrnvoid print_num(NUM *n)rnrn int i, j;rn for(i = sizeof(n->a)/sizeof(n->a[0])-1; i>=0;i--)rn if(n->a[i]) break;rn if(i>=0)rn for(;i>=0;i--)rn printf("%d",n->a[i]);rn else printf("0");rn for(i = sizeof(n->b)/sizeof(n->b[0])-1; i>=0;i--)rn if(n->b[i]) break;rn if(i>=0)rn rn printf(".");rn for(j = 0; j <= i; j ++)rn printf("%d", n->b[j]);rn rnrnvoid add(NUM *a, NUM *b, NUM *c)rnrn int t=0;rn int i;rn for(i=sizeof(a->b)/sizeof(a->b[0])-1;i>=0;i--)rn rnif(a->b[i]>=b->b[i])rnrnc->b[i] =a->b[i] - b->b[i];rnrnelsernrnc->b[i]=a->b[i]-b->b[i];rna->b[i+1]--;rnrn rn for(i=0;ia)/sizeof(a->a[0]-1); i ++)rn rnif(a->a[i]>=b->a[i])rnrnc->a[i]=a->a[i] - b->a[i];rnrnelsernrnc->a[i] =a->a[i]-b->a[i];rna->a[i+1]--;rnrn rnrnrnint main()rnrn char sa[400], sb[400];rn NUM a,b,c;rn scanf("%s%s", sa,sb);rn format_num(&a, sa);rn format_num(&b,sb);rn print_num(&a);rn printf(" - ");rn print_num(&b);rn printf(" = ");rn add(&a,&b,&c);rn print_num(&c);rn printf("\n");rn return 0;rn[/code]

没有更多推荐了,返回首页

私密
私密原因:
请选择设置私密原因
  • 广告
  • 抄袭
  • 版权
  • 政治
  • 色情
  • 无意义
  • 其他
其他原因:
120
出错啦
系统繁忙,请稍后再试