大数运算(相加)



具体代码如下 先放上错误代码​(只适合位数对齐的)

#include<stdio.h>

#include<string.h>

#define N 500

int main(void)

{

char s1[N],s2[N];

int cp=0,x,k;

int R[N];

gets(s1);

gets(s2);

//放上循环变量 i(跑s1),j(跑s2), k(给R里面存值) 

int i=strlen(s1)-1;

int j=strlen(s2)-1;

k=N-1;

        while (i>-1&&j>-1)//数组没完就进循环

{

x=(s1[i--]-'0')+(s2[j--]-'0')+cp;

R[k--]=x%10;

cp=x/10;

}

if(cp)//要是cp还有值 就把进位加上去 

R[k--]=cp;

for(i=k+1;i<N;i++)//输出数值 

printf("%d",R[i]);

return 0;

}​

下面附上正确代码:

​#include<stdio.h>

#include<string.h>

#define N 500

int main(void)

{

char s1[N],s2[N];

int cp=0,x,k;

int R[N];

gets(s1);

gets(s2);

//放上循环变量 i(跑s1),j(跑s2), k(给R里面存值) 

int i=strlen(s1)-1;

int j=strlen(s2)-1;

k=N-1;

while (i>-1||j>-1)//只要有一个数组没完就进循环

{

if(i>-1&&j>-1) //两个都没完

x=(s1[i--]-'0')+(s2[j--]-'0')+cp;

else if(j>-1&&i<0)//s1完了 s2没完

x=s2[j--]-'0'+cp;//处理s2 

else

x=s1[i--]-'0'+cp;//处理s1 

R[k--]=x%10;

cp=x/10;

}

if(cp)//要是cp还有值 就把进位加上去 

R[k--]=cp;

//为什么没有让cp=cp/10;呢??

//因为加法最多进位一位所以不需要哦。

//昨天的乘法有可能进两位(100)所以要加上 

for(i=k+1;i<N;i++)//输出数值 

printf("%d",R[i]);

return 0;

}

(代码是经过运行测试可以执行出结果的!!!)

    谢谢大家支持,我会尽快更新的,大家和我一起努力哦.

    我是小纸人.

具体代码如下 先放上错误代码​(只适合位数对齐的)

#include<stdio.h>

#include<string.h>

#define N 500

int main(void)

{

char s1[N],s2[N];

int cp=0,x,k;

int R[N];

gets(s1);

gets(s2);

//放上循环变量 i(跑s1),j(跑s2), k(给R里面存值) 

int i=strlen(s1)-1;

int j=strlen(s2)-1;

k=N-1;

        while (i>-1&&j>-1)//数组没完就进循环

{

x=(s1[i--]-'0')+(s2[j--]-'0')+cp;

R[k--]=x%10;

cp=x/10;

}

if(cp)//要是cp还有值 就把进位加上去 

R[k--]=cp;

for(i=k+1;i<N;i++)//输出数值 

printf("%d",R[i]);

return 0;

}​

下面附上正确代码:

​#include<stdio.h>

#include<string.h>

#define N 500

int main(void)

{

char s1[N],s2[N];

int cp=0,x,k;

int R[N];

gets(s1);

gets(s2);

//放上循环变量 i(跑s1),j(跑s2), k(给R里面存值) 

int i=strlen(s1)-1;

int j=strlen(s2)-1;

k=N-1;

while (i>-1||j>-1)//只要有一个数组没完就进循环

{

if(i>-1&&j>-1) //两个都没完

x=(s1[i--]-'0')+(s2[j--]-'0')+cp;

else if(j>-1&&i<0)//s1完了 s2没完

x=s2[j--]-'0'+cp;//处理s2 

else

x=s1[i--]-'0'+cp;//处理s1 

R[k--]=x%10;

cp=x/10;

}

if(cp)//要是cp还有值 就把进位加上去 

R[k--]=cp;

//为什么没有让cp=cp/10;呢??

//因为加法最多进位一位所以不需要哦。

//昨天的乘法有可能进两位(100)所以要加上 

for(i=k+1;i<N;i++)//输出数值 

printf("%d",R[i]);

return 0;

}

(代码是经过运行测试可以执行出结果的!!!)

    谢谢大家支持,我会尽快更新的,大家和我一起努力哦.

    我是小纸人.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值