6个回答
2013-10-28
展开全部
用数组做,高精度算法。数组的每一个元素放一个位,如a[0]代表个位,a[1]代表十位,依此类推。
下面是算法的实现:
c[0]=(a[0]+b[0])%10; //c[x]为结果,a[x],b[x]为两个加数
overflow=(a[0]+b[0])/10; //overflow为进位的值
for(i=1;i<n;i++) //n为你两个加数的最大位数
{
c[i]=(a[i]+b[i]+overflow)%10; //a和b的第i位相加再加上第i-1位的进位的和的个位是c第i位的值
overflow=(a[i]+b[i]+overflow)/10; //a和b的第i位相加再加上第i-1位的进位的和的十位是向高位的进位
}
当然读数的时候要注意,由于位数太大,可以将其当成字符串读,再按位分离。(可能还有其他办法,不列举)
举个实例
987+87=?
个位相加c[0]=(a[0]+b[0])%10=(7+7)%10=4 ,进位 overflow=(a[0]+b[0])/10=1
十位相加c[1]=(a[1]+b[1]+overflow)%10= (8+8+1)%10=7 进位 overflow=(a[1]+b[1]+overflow)/10=1
百位相加c[2]=(a[2]+b[2]+overflow)%10=(9+0+1)%10=0 进位 overflow=(a[1]+b[1]+overflow)/10=1
。。。下面类推
下面是算法的实现:
c[0]=(a[0]+b[0])%10; //c[x]为结果,a[x],b[x]为两个加数
overflow=(a[0]+b[0])/10; //overflow为进位的值
for(i=1;i<n;i++) //n为你两个加数的最大位数
{
c[i]=(a[i]+b[i]+overflow)%10; //a和b的第i位相加再加上第i-1位的进位的和的个位是c第i位的值
overflow=(a[i]+b[i]+overflow)/10; //a和b的第i位相加再加上第i-1位的进位的和的十位是向高位的进位
}
当然读数的时候要注意,由于位数太大,可以将其当成字符串读,再按位分离。(可能还有其他办法,不列举)
举个实例
987+87=?
个位相加c[0]=(a[0]+b[0])%10=(7+7)%10=4 ,进位 overflow=(a[0]+b[0])/10=1
十位相加c[1]=(a[1]+b[1]+overflow)%10= (8+8+1)%10=7 进位 overflow=(a[1]+b[1]+overflow)/10=1
百位相加c[2]=(a[2]+b[2]+overflow)%10=(9+0+1)%10=0 进位 overflow=(a[1]+b[1]+overflow)/10=1
。。。下面类推
展开全部
1.pow是数学函数,你包含头文件math.h就可以了
2.int
a[100]是定义100个元素,下标范围0-99,你用100就越界了
3.void
main要求没有返回值,你却return
c,这是不对的
2.int
a[100]是定义100个元素,下标范围0-99,你用100就越界了
3.void
main要求没有返回值,你却return
c,这是不对的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-10-28
展开全部
#include<stdio.h>void main(){ int i,temp,jw=0; int a[100],b[100],c[101]; for(i=0;i<100;i++) { scanf("%d,"&temp); a[100-i]=temp; } for(i=0;i<100;i++) { scanf("%d,"&temp); b[100-i]=temp; } for(i=0;i<101;i++) { c[i]=a[i]+b[i]+jw; jw=c[i]/10; } printf("sum is:%d"); for(i=0;i<100+jw;i++) printf("%d,"c[100+jw-i]);}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
声明了void型的manin函数是没有返回值的,你的程序里有return
c是会出错的。
如果你需要输出结果
可以用printf,getch()。
c是会出错的。
如果你需要输出结果
可以用printf,getch()。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-10-28
展开全部
用数组去做,char[100]这样做就行了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询