zoukankan      html  css  js  c++  java
  • hduOj1002遇到的知识总结

    strlen:一个c/c++的库函数,就是计数函数,即从串头开始,然后到‘’为止,不计入''

    代码思路:从后往前诸位相加,将大数转化为字符串,然后采取进位,最终结果数比原数字串多一位

    #include<iostream>
    #include<cstring>
    
    
    using namespace std;
    
    
    int main(){
        char a[1000];
        char b[1001];//第二个字符串存放结果,所以需要大的位数
        int case_N;//存放case个数
        int length_a;
        int length_b;
    
        char *p_a;
        char *p_b;
        char *p_s;//指向第二个串的指针,存放结果
        int sum;
        int flag=0;
        int i;
        cin>>case_N;
        for(i=1;i<=case_N;i++){
            flag=0;
            cout<<"Case "<<i<<":"<<endl;
            cin>>a>>b;
            length_a=strlen(a);
            length_b=strlen(b);
            p_a=a+length_a-1;
            p_b=b+length_b-1;
            cout<<a<<" + "<<b<<" = ";
            p_s=b+(length_a>length_b?length_a:length_b)+1;
            *p_s='';
            p_s--;
            //计算求和,从各自的个位往前递增相加
            while(p_a>=a&&p_b>=b)//如果两个串对应的指针都没有到各自串的第一个位置
            {
                sum=*p_a-'0'+*p_b-'0'+flag;
                if(sum>=10)
                {
                    flag=1;//产生进位
                    *p_s=sum-10+'0';
                }
                else
                {
                    flag=0;
                    *p_s=sum+'0';
                }
                p_a--;
                p_b--;
                p_s--;        
            
            }
    
            if(p_a==a-1){//如果第一传中数字从低位到高位都加完了
                while(p_b>=b){//则循环加第二个串中剩下没加的数字,加到字符串中的第一个数字字符
                    sum=*p_b-'0'+flag;
                    if(sum>=10){
                        flag=1;
                        *p_s=sum-10+'0';
    
                    }
                    else
                    {
                        flag=0;
                        *p_s=sum+'0';
                    
                    }
                    p_b--;
                    p_s--;
                }
                }
    
            else{
                while(p_a>=a){//如果第二个串中数字从低位到高位都加完了
                    sum=*p_a-'0'+flag;//把第一个串中剩下没加的数字,加到第二个字符串的第一个数字字符
                    if(sum>=10)
                    {
                        flag=1;
                        *p_s=sum-10+'0';
    
                    }else{
                        flag=0;
                        *p_s=sum+'0';
                    
                    
                    }
                    p_a--;
                    p_s--;
    
                    
                    
                    
                    }
                
                
                }
    
    
            if(flag==0){//最后一次相加没有进位
                cout<<p_s+1;//从第二个数组中的第二个位置开始输出,即为求和结果
            
            
            }else{//如果最后一次相加有进位,则把进位1,存放到第二数组中的第一个位置
    
                *p_s='1';
                cout<<p_s;
    
            }
            if(i==case_N){
    
                cout<<endl;
            }
            else{
                cout<<endl<<endl;//空行展开
            }
        }
            
        
    return 0;
    
    
    
    
    
    
    
    }
  • 相关阅读:
    day21_map&debug
    Error: A JNI error has occurred, please check your installation and try again
    day20_比较器&Map
    day1819_List&Set&Genericity
    day17_Collection
    String类是不可改变的,所以你一旦创建了String对象,那它的值就无法改变了
    day15_api01
    day16_api02
    渡河问题
    leetcode 春季个人赛
  • 原文地址:https://www.cnblogs.com/resort-033/p/14352622.html
Copyright © 2011-2022 走看看