• 大整数加法 面试题


    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;
    }
  • 相关阅读:
    计算机操作系统之进程管理
    剑指offer——两个链表的第一个公共结点
    剑指offer——数字在排序数组中出现的次数
    剑指offer——二叉树的深度与平衡二叉树的判断
    剑指offer——数组中只出现一次的数字
    剑指offer——和为s的两个数字VS和为s的连续正数序列
    剑指offer——翻转单词顺序VS左旋转字符串
    剑指offer——扑克牌的顺子
    剑指offer——圆圈中最后剩下的数字
    剑指offer——求1+2+...+n
  • 原文地址:https://www.cnblogs.com/meihao1203/p/8023524.html
Copyright © 2020-2023  润新知