一道求A+B=?的c语言题?

例如112233445566778899+998877665544332211=1111111111111111110注意数据很长请哪位高手指教一下该如何编程?... 例如112233445566778899 + 998877665544332211 = 1111111111111111110
注意数据很长
请哪位高手指教一下该如何编程?
展开
 我来答
依旧飘流
2006-10-23 · TA获得超过985个赞
知道小有建树答主
回答量:623
采纳率:0%
帮助的人:251万
展开全部
/*我做了一个,你看看,应该可以很容易懂得*/
#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);
}
主要考虑进位问题,逢十进一。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
leeps_my
2006-10-15 · TA获得超过807个赞
知道小有建树答主
回答量:212
采纳率:0%
帮助的人:0
展开全部
 
 
 
你可以用字符串来表示那些超长的数字,然后写一个求和的函数直接对它们进行操作。
下面的 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 ) );
}
 
 
 
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
屈子鉴
2006-10-15 · 超过22用户采纳过TA的回答
知道答主
回答量:62
采纳率:0%
帮助的人:0
展开全部
这个式子可以你分解来看!如
1122+9988
你可以看成
22+88=110
此时有进位时你把进位拿出来!就是判断位数大于2时拿出1
11+99+1=111
此时要加上1的进位!
最后结果把下列值加起来就可以了!
11110
可以用高位数据右移两位+低位数据就可以了!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
深海里的盐汽水OU
2006-10-15 · 超过20用户采纳过TA的回答
知道答主
回答量:86
采纳率:0%
帮助的人:0
展开全部
这种程序最好使用数组。
把A和B分别存入两个整型数组,每一位存一个数字,按数位进行计算(个位跟个位,十位跟十位这样),注意进位情况,计算后的结果也存入一个整型数组。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(14)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式