c语言 大数开方,大数加法之C语言函数法(只有正数版)

由于某些原因,我于今天2017-4-19将我的博文搬到博客园了,以后我就在这里扎根了。

之前想过在博客写文章方便日后复习,但一直未能实现,所以,现在这篇是我个人人生中第一篇博客,所以写博客完全没经验,可能会有些啰嗦,读者将就着看吧,哈哈。由于本人还是学生,所以有理解不对的地方,请各位大神指出,让我,让后面看到此文章的人共同进步,谢谢,本文适合新手看,个人觉得思路挺清晰,大神可飘过,勿喷。

大数加法,可以模拟小学的加法,主要是几步:由字符型转换成整形数组,反转相加,处理进位情况,再转换回字符型输出答案。废话不多说了,代码如下:

# include

# include

char * sum(char *a,char*b)//对C语言来说返回一个字符指针,因为我们的结果是以字符串形式输出

{

int s[1000]= {0};//用整形数组存储数字,记得清零

char c[1000];//这将是我们用来输出的数组,后面直接返回数组名 c即可

int i,j,maxlen,d;

int la=strlen(a),lb=strlen(b);

la>lb?maxlen=la:maxlen=lb;//这里是要找出两个数字的最高位

for(j=la-1; j>=0; j--)//将字符转换成数字并反转存进整形数组

s[la-1-j]+=a[j]-'0';

for(j=lb-1; j>=0; j--)//同上

s[lb-1-j]+=b[j]-'0';

for(i=0,d=0; i

{

s[i]+=d;//从低位开始

d=s[i]/10;//如果两数相加超过十 d就会变1

s[i]%=10;//然后此时s[i]存的就是该位上的数字

}

if(d>0)//处理最高位

s[maxlen++]+=d;

for(i=maxlen-1; i>=0; i--)//再将整形数组 反转转换为字符数组

c[maxlen-1-i]=s[i]+'0';

c[maxlen]=' ';//最后面加上结束符

return c;//返回字符指针

}

int main(void)

{

char a[1000],b[1000];

char *c;

while(scanf("%s %s",a,b))

{

c=sum(a,b);

printf("%s

",c);

}

return 0;

}

以上就是鄙人之见

测试效果如下:

fea72a2403eca9166be972e6303935b6.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值