
一道求A+B=?的c语言题?
例如112233445566778899+998877665544332211=1111111111111111110注意数据很长请哪位高手指教一下该如何编程?...
例如112233445566778899 + 998877665544332211 = 1111111111111111110
注意数据很长
请哪位高手指教一下该如何编程? 展开
注意数据很长
请哪位高手指教一下该如何编程? 展开
16个回答
展开全部
/*我做了一个,你看看,应该可以很容易懂得*/
#include<string.h>
#define M 50
main()
{char a[M],b[M],c[M],d[M];
int ia,ib,ic,id;
printf("input a:");
scanf("%s",a);/*输入a*/
printf("\ninput b:");
scanf("%s",b);/*输入b*/
ia=strlen(a);
ib=strlen(b);/*求出a,b的长度(也是输入数据的位数)*/
if(ia>ib){strcpy(c,a);strcpy(d,b);}/*比较两个的长短,把长的那个放到c里,短的放到d里*/
else if(ia==ib&&(a[0]+b[0]-'0'>'9')){/*如果两数位数一样,考虑首位相加进位,并事先多准备一个位置*/
ic=ia+1;c[0]='0';c[1]='\0';strcat(c,a);strcpy(d,b);}
else {strcpy(c,b);strcpy(d,a);}/*比较两个的长短,把长的那个放到c里,短的放到d里*/
ic=strlen(c);
id=strlen(d);/*求出实际参加运算的c,d的长度*/
do{id--;ic--;
c[ic]=c[ic]+d[id]-'0';/*运算*/
if(c[ic]>'9'){c[ic]-=10;c[ic-1]+=1;}/* 处理进位,逢十进一,原位减十,前位加一*/
}while(ic!=0&&id!=0);
printf("\n%s+%s=%s\n",a,b,c);
}
#include<string.h>
#define M 50
main()
{char a[M],b[M],c[M],d[M];
int ia,ib,ic,id;
printf("input a:");
scanf("%s",a);/*输入a*/
printf("\ninput b:");
scanf("%s",b);/*输入b*/
ia=strlen(a);
ib=strlen(b);/*求出a,b的长度(也是输入数据的位数)*/
if(ia>ib){strcpy(c,a);strcpy(d,b);}/*比较两个的长短,把长的那个放到c里,短的放到d里*/
else if(ia==ib&&(a[0]+b[0]-'0'>'9')){/*如果两数位数一样,考虑首位相加进位,并事先多准备一个位置*/
ic=ia+1;c[0]='0';c[1]='\0';strcat(c,a);strcpy(d,b);}
else {strcpy(c,b);strcpy(d,a);}/*比较两个的长短,把长的那个放到c里,短的放到d里*/
ic=strlen(c);
id=strlen(d);/*求出实际参加运算的c,d的长度*/
do{id--;ic--;
c[ic]=c[ic]+d[id]-'0';/*运算*/
if(c[ic]>'9'){c[ic]-=10;c[ic-1]+=1;}/* 处理进位,逢十进一,原位减十,前位加一*/
}while(ic!=0&&id!=0);
printf("\n%s+%s=%s\n",a,b,c);
}
2016-01-26 · 百度知道合伙人官方认证企业
1【专注:Python+人工智能|Java大数据|HTML5培训】 2【免费提供名师直播课堂、公开课及视频教程】 3【地址:北京市昌平区三旗百汇物美大卖场2层,微信公众号:yuzhitc】
向TA提问
关注

展开全部
#include<string.h>
#define M 50
main()
{char a[M],b[M],c[M],d[M];
int ia,ib,ic,id;
printf("input a:");
scanf("%s",a);/*输入a*/
printf("\ninput b:");
scanf("%s",b);/*输入b*/
ia=strlen(a);
ib=strlen(b);/*求出a,b的长度(也是输入数据的位数)*/
if(ia>ib){strcpy(c,a);strcpy(d,b);}/*比较两个的长短,把长的那个放到c里,短的放到d里*/
else if(ia==ib&&(a[0]+b[0]-'0'>'9')){/*如果两数位数一样,考虑首位相加进位,并事先多准备一个位置*/
ic=ia+1;c[0]='0';c[1]='\0';strcat(c,a);strcpy(d,b);}
else {strcpy(c,b);strcpy(d,a);}/*比较两个的长短,把长的那个放到c里,短的放到d里*/
ic=strlen(c);
id=strlen(d);/*求出实际参加运算的c,d的长度*/
do{id--;ic--;
c[ic]=c[ic]+d[id]-'0';/*运算*/
if(c[ic]>'9'){c[ic]-=10;c[ic-1]+=1;}/* 处理进位,逢十进一,原位减十,前位加一*/
}while(ic!=0&&id!=0);
printf("\n%s+%s=%s\n",a,b,c);
}
主要考虑进位问题,逢十进一。
#define M 50
main()
{char a[M],b[M],c[M],d[M];
int ia,ib,ic,id;
printf("input a:");
scanf("%s",a);/*输入a*/
printf("\ninput b:");
scanf("%s",b);/*输入b*/
ia=strlen(a);
ib=strlen(b);/*求出a,b的长度(也是输入数据的位数)*/
if(ia>ib){strcpy(c,a);strcpy(d,b);}/*比较两个的长短,把长的那个放到c里,短的放到d里*/
else if(ia==ib&&(a[0]+b[0]-'0'>'9')){/*如果两数位数一样,考虑首位相加进位,并事先多准备一个位置*/
ic=ia+1;c[0]='0';c[1]='\0';strcat(c,a);strcpy(d,b);}
else {strcpy(c,b);strcpy(d,a);}/*比较两个的长短,把长的那个放到c里,短的放到d里*/
ic=strlen(c);
id=strlen(d);/*求出实际参加运算的c,d的长度*/
do{id--;ic--;
c[ic]=c[ic]+d[id]-'0';/*运算*/
if(c[ic]>'9'){c[ic]-=10;c[ic-1]+=1;}/* 处理进位,逢十进一,原位减十,前位加一*/
}while(ic!=0&&id!=0);
printf("\n%s+%s=%s\n",a,b,c);
}
主要考虑进位问题,逢十进一。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你可以用字符串来表示那些超长的数字,然后写一个求和的函数直接对它们进行操作。
下面的 unsignedAdd 既是这样的一个函数:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/* Returns the sum of a and b. */
char *unsignedAdd( const char *a, const char *b ) {
int aI = strlen( a ),
bI = strlen( b ),
rI = aI > bI ? aI : bI;
char *result = calloc( rI + 1, 1 );
if ( result != NULL )
while( rI-- ) {
result[ rI ] += ( --aI >= 0 ? a[ aI ] : '0' ) +
( --bI >= 0 ? b[ bI ] : '0' ) - '0';
if( result[ rI ] > '9' ) {
result[ rI ] -= 10;
if( rI > 0 )
result[ rI - 1 ]++;
else { /* grow to fit the final carry */
result = realloc( result, strlen( result ) + 2 );
if ( result != NULL ) {
memmove( result + 1, result, strlen( result ) + 1 );
result[ 0 ] = '1';
}
}
}
}
return result;
}
void main( ) {
char *a = "112233445566778899",
*b = "998877665544332211",
*x = "3138550867693340381917894711603833208051177722232017256448",
*y = "5986310706507378352962293074805895248510699696029696";
puts( unsignedAdd( a, b ) );
puts( unsignedAdd( x, y ) );
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个式子可以你分解来看!如
1122+9988
你可以看成
22+88=110
此时有进位时你把进位拿出来!就是判断位数大于2时拿出1
11+99+1=111
此时要加上1的进位!
最后结果把下列值加起来就可以了!
11110
可以用高位数据右移两位+低位数据就可以了!
1122+9988
你可以看成
22+88=110
此时有进位时你把进位拿出来!就是判断位数大于2时拿出1
11+99+1=111
此时要加上1的进位!
最后结果把下列值加起来就可以了!
11110
可以用高位数据右移两位+低位数据就可以了!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这种程序最好使用数组。
把A和B分别存入两个整型数组,每一位存一个数字,按数位进行计算(个位跟个位,十位跟十位这样),注意进位情况,计算后的结果也存入一个整型数组。
把A和B分别存入两个整型数组,每一位存一个数字,按数位进行计算(个位跟个位,十位跟十位这样),注意进位情况,计算后的结果也存入一个整型数组。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询