C语言“字符串大整数加法”这题怎么做?
答案:5 悬赏:50 手机版
解决时间 2021-04-02 08:46
- 提问者网友:临风不自傲
- 2021-04-01 10:20
C语言“字符串大整数加法”这题怎么做?
最佳答案
- 五星知识达人网友:山君与见山
- 2021-04-01 10:34
#include
#include
#define MAXD 100
int main()
{
char str1[MAXD],str2[MAXD]; //用于保存键盘输入的两个待加大整数
int num1[MAXD],num2[MAXD];
while(1)
{
memset(str1,0,sizeof(str1));
memset(str1,0,sizeof(str2));
memset(num1,0,sizeof(num1));
memset(num2,0,sizeof(num2));//将这些数组清零
scanf("%s",str1);
scanf("%s",str2);
int len1,len2,i,j;
len1=strlen(str1);
len2=strlen(str2);
j=0;
int max=len1>len2?len1:len2;
for(i=len1-1; i>=0; i--)
num1[j++]=str1[i]-'0';
j=0;
for(i=len2-1; i>=0; i--)
num2[j++]=str2[i]-'0';
for(i=0; i {
num2[i]+=num1[i];//相加
if(num2[i]>=10)
{
num2[i]-=10;
num2[i+1]+=1;//产生进位
}
}
if(num2[max]) printf("%d",num2[max]);//如果最高位产生进位
for(i=max-1; i>=0; i--)
printf("%d",num2[i]);
printf("
");
}
return 0;
}
#include
#define MAXD 100
int main()
{
char str1[MAXD],str2[MAXD]; //用于保存键盘输入的两个待加大整数
int num1[MAXD],num2[MAXD];
while(1)
{
memset(str1,0,sizeof(str1));
memset(str1,0,sizeof(str2));
memset(num1,0,sizeof(num1));
memset(num2,0,sizeof(num2));//将这些数组清零
scanf("%s",str1);
scanf("%s",str2);
int len1,len2,i,j;
len1=strlen(str1);
len2=strlen(str2);
j=0;
int max=len1>len2?len1:len2;
for(i=len1-1; i>=0; i--)
num1[j++]=str1[i]-'0';
j=0;
for(i=len2-1; i>=0; i--)
num2[j++]=str2[i]-'0';
for(i=0; i
num2[i]+=num1[i];//相加
if(num2[i]>=10)
{
num2[i]-=10;
num2[i+1]+=1;//产生进位
}
}
if(num2[max]) printf("%d",num2[max]);//如果最高位产生进位
for(i=max-1; i>=0; i--)
printf("%d",num2[i]);
printf("
");
}
return 0;
}
全部回答
- 1楼网友:低血压的长颈鹿
- 2021-04-01 14:02
#include
#include
int a[201],b[201];
char c[201];
int main()
{
int s1,s2,s,i,k=0;
scanf("%s",c);
s1=strlen(c);
s=s1;
for(i=0;i a[i+1]=c[s1-i-1]-48;
memset(c,0,sizeof(c));
scanf("%s",c);
s2=strlen(c);
for(i=0;i b[i+1]=c[s2-i-1]-48;
if(s2>s1)s=s2;
for(i=1;i<=s;i++)
{
a[i]+=b[i];
if(a[i]>=10){
a[i]-=10;
a[i+1]++;
}
}
for(i=s+1;i>=1;i--)
if(a[i]!=0||k==1||i==1){printf("%d",a[i]);k=1;}
}
#include
int a[201],b[201];
char c[201];
int main()
{
int s1,s2,s,i,k=0;
scanf("%s",c);
s1=strlen(c);
s=s1;
for(i=0;i
memset(c,0,sizeof(c));
scanf("%s",c);
s2=strlen(c);
for(i=0;i
if(s2>s1)s=s2;
for(i=1;i<=s;i++)
{
a[i]+=b[i];
if(a[i]>=10){
a[i]-=10;
a[i+1]++;
}
}
for(i=s+1;i>=1;i--)
if(a[i]!=0||k==1||i==1){printf("%d",a[i]);k=1;}
}
- 2楼网友:摆渡翁
- 2021-04-01 13:50
# include
# include
int main(){
char str1[1000],str2[1000];
char str3[1000],str4[1000];
char result[1000];
char result2[1000];
int k1,k2,i,c = 0,k3 = 0,k4 = 0,temp,j;
scanf("%s,%s",str1,str2);
k1 = strlen(str1);
k2 = strlen(str2);
for(i=k1-1;i>=0;i--)
str3[k3++] = str1[i];
for(i=k2-1;i>=0;i--)
str4[k4++] = str2[i];
str3[k3] = 0;
str4[k4] = 0;
//puts(str3);
//puts(str4);
for(i=0;str3[i]&&str4[i];i++)
{
temp = (str3[i]-48)+(str4[i]-48)+c;
if(temp<10)
{
result[i] = temp+48;
c = 0;
}
else
{
result[i] = temp-10+48;
c = 1;
}
}
if(k3>k4)
{
for(j=i;str3[j];j++)
{
result[j] = str3[j]+c;
c = 0;
}
}
else
{
for(j=i;str4[j];j++)
{
result[j] = str4[j]+c;
c = 0;
}
}
result[j] = 0;
//puts(result);
c = 0;
for(i=strlen(result)-1;i>=0;i--)
{
result2[c++] = result[i];
}
result2[c] = 0;
printf("%s",result2);
return 0;
}
没仔细研究
# include
int main(){
char str1[1000],str2[1000];
char str3[1000],str4[1000];
char result[1000];
char result2[1000];
int k1,k2,i,c = 0,k3 = 0,k4 = 0,temp,j;
scanf("%s,%s",str1,str2);
k1 = strlen(str1);
k2 = strlen(str2);
for(i=k1-1;i>=0;i--)
str3[k3++] = str1[i];
for(i=k2-1;i>=0;i--)
str4[k4++] = str2[i];
str3[k3] = 0;
str4[k4] = 0;
//puts(str3);
//puts(str4);
for(i=0;str3[i]&&str4[i];i++)
{
temp = (str3[i]-48)+(str4[i]-48)+c;
if(temp<10)
{
result[i] = temp+48;
c = 0;
}
else
{
result[i] = temp-10+48;
c = 1;
}
}
if(k3>k4)
{
for(j=i;str3[j];j++)
{
result[j] = str3[j]+c;
c = 0;
}
}
else
{
for(j=i;str4[j];j++)
{
result[j] = str4[j]+c;
c = 0;
}
}
result[j] = 0;
//puts(result);
c = 0;
for(i=strlen(result)-1;i>=0;i--)
{
result2[c++] = result[i];
}
result2[c] = 0;
printf("%s",result2);
return 0;
}
没仔细研究
- 3楼网友:傲气稳了全场
- 2021-04-01 13:14
#include
#include
#define MAXD 100
int main()
{
char str1[MAXD],str2[MAXD]; //用于保存键盘输入的两个待加大整数
int num1[MAXD],num2[MAXD];
while(1)
{
memset(str1,0,sizeof(str1));
memset(str1,0,sizeof(str2));
memset(num1,0,sizeof(num1));
memset(num2,0,sizeof(num2));//将这些数组清零
scanf("%s",str1);
scanf("%s",str2);
int len1,len2,i,j;
len1=strlen(str1);
len2=strlen(str2);
j=0;
int max=len1>len2?len1:len2;
for(i=len1-1; i>=0; i--)
num1[j++]=str1[i]-'0';
j=0;
for(i=len2-1; i>=0; i--)
num2[j++]=str2[i]-'0';
for(i=0; i {
num2[i]+=num1[i];//相加
if(num2[i]>=10)
{
num2[i]-=10;
num2[i+1]+=1;//产生进位
}
}
if(num2[max]) printf("%d",num2[max]);//如果最高位产生进位
for(i=max-1; i>=0; i--)
printf("%d",num2[i]);
printf("\n");
}
return 0;
}
#include
#define MAXD 100
int main()
{
char str1[MAXD],str2[MAXD]; //用于保存键盘输入的两个待加大整数
int num1[MAXD],num2[MAXD];
while(1)
{
memset(str1,0,sizeof(str1));
memset(str1,0,sizeof(str2));
memset(num1,0,sizeof(num1));
memset(num2,0,sizeof(num2));//将这些数组清零
scanf("%s",str1);
scanf("%s",str2);
int len1,len2,i,j;
len1=strlen(str1);
len2=strlen(str2);
j=0;
int max=len1>len2?len1:len2;
for(i=len1-1; i>=0; i--)
num1[j++]=str1[i]-'0';
j=0;
for(i=len2-1; i>=0; i--)
num2[j++]=str2[i]-'0';
for(i=0; i
num2[i]+=num1[i];//相加
if(num2[i]>=10)
{
num2[i]-=10;
num2[i+1]+=1;//产生进位
}
}
if(num2[max]) printf("%d",num2[max]);//如果最高位产生进位
for(i=max-1; i>=0; i--)
printf("%d",num2[i]);
printf("\n");
}
return 0;
}
- 4楼网友:第幾種人
- 2021-04-01 11:39
分长一倍,会有好多人来抢着做啊
我的想法是定义来好字符串 a[N],b[N],c[N],
再定义一个 flag标记是不是进位,初始值是零
反转顺序,比如输入的是 123456,反转后变成 654321
就是让个位数刚好在 a[0]位置
for循环,直到两个数都到最高位
tmp=a[i]+b[i]-'0'-'0';
c[i]=tmp%10+flag
flat=tmp/10
最后再反回来
我的想法是定义来好字符串 a[N],b[N],c[N],
再定义一个 flag标记是不是进位,初始值是零
反转顺序,比如输入的是 123456,反转后变成 654321
就是让个位数刚好在 a[0]位置
for循环,直到两个数都到最高位
tmp=a[i]+b[i]-'0'-'0';
c[i]=tmp%10+flag
flat=tmp/10
最后再反回来
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯