大整数加法 面试题

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">






1、小熊很喜欢只包含'4'、'7'的数,称为幸运数,例如44,47,77,774都是小熊的喜欢的数,而"141871"不是幸运数。

但是幸运数不是常常出现,于是他认为"141871"其实是包含幸运数"47"的,即去掉非'4','7'的数字后,数变成了"47"是幸运数字,称为伪幸运数。

给定数a,以及幸运数b,问第一个满足大于a,且包含幸运数b的数。

输入

输入两个正整数a、b(<100000),分别表示给定数值和幸运数

输出

输出第一个满足大于a,且包含幸运数b的数

样例输入

100 47

样例输出

147






3、给一个数N表示测试用例的个数,然后在给N组a, b,求a+b的值,其中a,b<10^50且a, b>=0;

测试用例之间以空行隔开,且最后一个测试用例之后没有空行。

样例输入:

2

1 2

112233445566778899 998877665544332211

样例输出:

Case 1:

1 + 2 = 3




Case 2:

112233445566778899 + 998877665544332211 = 1111111111111111110









1003

1005

1006

1007

1028






3.给一个数N表示测试用例的个数,然后在给N组a, b,求a+b的值,其中a,b<10^50且a, b>=0;

测试用例之间以空行隔开,且最后一个测试用例之后没有空行。

样例输入:

2

1 2

112233445566778899 998877665544332211

样例输出:

Case 1:

1 + 2 = 3



Case 2:

112233445566778899 + 998877665544332211 = 1111111111111111110

#include<stdio.h>

#include<stdlib.h>

#include<string.h>




typedef struct

{

        char a[60];

        char b[60];

        char c[60];

}ab,pab;




void reverse(char str)

{

        int len=strlen(str);

        int i;

        char tmp;

        for(i=0;i<len/2;i++)

        {

                tmp=str[i];

                str[i]=str[len-1-i];

                str[len-1-i]=tmp;

        }

}

void Reverse(pab p,int N)

{

        int i,j;

        for(i=0;i<N;i++)

        {

                reverse(p[i].a);

                reverse(p[i].b);

                reverse(p[i].c);

        }

}

void add( char* a, char* b,char *c)

{

        int lena=strlen(a);

        int lenb=strlen(b);

        int i,j,z=0;

        int flag=0;

        int tmpa,tmpb;

        int len=lena>lenb?lena:lenb;

        for(i=0;i<len;i++)

        {

                if((i+1)>strlen(a))  //保证a,b字符串不一样长的时候结果正确,长度从1开始计算

                {

                        tmpa=0;

                }

                else

                {

                        tmpa=a[i]-48;

                }

                if((i+1)>strlen(b))

                {

                        tmpb=0;

                }

                else

                {

                        tmpb=b[i]-48;

                }

                if(tmpa+tmpb<10)

                {

                        c[z++]=tmpa+tmpb+48+flag;

                        flag=0;

                }

                else if(tmpa+tmpb>=10)

                {

                        c[z++]=tmpa+tmpb-10+48+flag;

                        flag=1;

                }

        }

        if(flag==1)

        {

                c[z]=1+48;

        }       

}



void Add(pab p,int N)

{

        int i,j,z;

        int lena,lenb,len;

        int flag=0;

        for(i=0;i<N;i++)

        {

                add(p[i].a,p[i].b,p[i].c);

        }

}





int main()

{

        int N;

        int i;

        pab p=(pab)calloc(100,sizeof(ab));

        scanf("%d",&N);

        for(i=0;i<N;i++)

        {

                scanf("%s %s",p[i].a,p[i].b);

        }

        Reverse(p,N);

        Add(p,N);

        Reverse(p,N);

        for(i=0;i<N;i++)

        {

                printf("case %d:\n",i+1);

                printf("%s + %s = %s\n",p[i].a,p[i].b,p[i].c);

        }

        system("pause");

        return 0;

}
SS9t1K5uH1AAAAAASUVORK5CYII=




转载于:https://www.cnblogs.com/meihao1203/p/8023524.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值