大整数加法 面试题

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: ",i+1);
                printf("%s + %s = %s ",p[i].a,p[i].b,p[i].c);
        }
        system("pause");
        return 0;
}
原文地址:https://www.cnblogs.com/meihao1203/p/8023524.html