6 条题解

  • 3
    @ 2023-10-8 19:56:10

    写在前面 这道题不难,我用这道题学习了一下字符串拼接和字符串加法进位,其实还想学习一下atoi函数和stoi函数,后来也没用。我这道题有很多细节在一开始并没有注意,导致出现了很多问题,想把代码分享出来,希望之后的同学注意细节。

    #include <math.h>
    #include <string.h>
    
    #include <iostream>
    
    int main() {
      int T = 0;
      std::cin >> T;
      for (int i = 0; i < T; i++) {
        int jinWei = 0;  // 这里只可能是0或1其他的情况都是错的
    
        std::string count1;
        std::string count2;
        std::string result;
        std::cin >> count1 >> count2;
    
        std::string result1 = count1;//16 17两行是用来保存输入的字符串不被前导零覆盖,输出使用
        std::string result2 = count2;
        int length1 = std::max(count1.length(), count2.length());
    
        // 22 到 32 部分是用来比较两字符串长度并且变为等长
        int lenMin = count1.length();
        int lenMax = count2.length();
        std::string m = "";
        for (int j = 0; j < std::abs(lenMax - lenMin); j++) {
          m = m + "0";
        }
        if (count1.length() > count2.length()) {
          count2 = m + count2;
        } else if (count1.length() < count2.length()) {
          count1 = m + count1;
        }
    
        for (int j = length1 - 1; j >= 0; j--) {
          int tempstr;
          int temp1 = 0;
          int temp2 = 0;
          temp1 = count1[j] - '0';
          temp2 = count2[j] - '0';
          int sum = temp1 + temp2 + jinWei;
          if (sum >= 10) {
            jinWei = 1;
          } else {
            jinWei = 0;
          }
          int yuShu = (sum) % 10;
          tempstr = yuShu;
          result = std::to_string(tempstr) + result;
        }
    
        std::cout << "Case " << i + 1 << ":" << std::endl;
        std::cout << result1 << " + " << result2 << " = ";
        if (jinWei == 1) {
          std::cout << "1";
        }
        std::cout << result << std::endl;
      }
    }
    
    • 1
      @ 2025-8-20 0:52:16
      #include <bits/stdc++.h>
      using namespace std;
      const int N = 1010;
      
      int a[N], b[N];
      int al, bl;
      
      void add(int a[], int &al, int b[], int &bl) {
      int t = 0;
      al = max(al, bl);
      for (int i = 0; i < al; i++) {
      t += a[i] + b[i];
      a[i] = t % 10;
      t /= 10;
      }
      if (t) a[al++] = 1;
      if(al > 1 && a[al - 1] == 0) al--;
      }//到底是改用while还是if有待考究
      
      int main() {
      int T;
      cin >> T;
      for (int k = 1; k <= T; k++) {
      memset(a, 0, sizeof(a));
      memset(b, 0, sizeof(b));
      al = 0;
      bl = 0;
      
      string x, y;
      cin >> x >> y;
      
      for (int i = x.size() - 1; i >= 0; i--) a[al++] = x[i] - '0';
      for (int i = y.size() - 1; i >= 0; i--) b[bl++] = y[i] - '0';
      
      // 执行加法
      add(a, al, b, bl);
      cout << "Case " << k << ":" << endl;
      cout << x << " + " << y << " = ";
      for (int i = al - 1; i >= 0; i--) cout << a[i];
      cout << endl;
      if (k < T) cout << endl;
      
      }
      return 0;
      }
      

      有大佬用一个数组就可以存储,用空间换时间,但是我比较笨,不会简便。

      • 0
        @ 2025-10-6 15:34:30

        c

        #include<stdio.h>
        #include<string.h>
        int main()
        {
            char a[1010],b[1010],s[1100];
            int t,l1,l2,lm,A,B,i;
            scanf("%d",&t);
            for(i=1;i<=t;i++){
                scanf("%s%s",a,b);
                l1=strlen(a);
                l2=strlen(b);
                if(l1>l2){//确定循环次数
                    lm=l1;
                }else{
                    lm=l2;
                }
                int sum=0,jin=0;
                int temp[1100]={0};
                for(int k=0;k<lm;k++){
                    if(k<l1){
                        A=a[l1-1-k]-'0';
                    }else{
                        A=0;
                    }if(k<l2){
                        B=b[l2-1-k]-'0';
                    }else{
                        B=0;
                    }sum=A+B+jin;
                    temp[k]=sum%10;//将相加数倒序存入
                    jin=sum/10;
                }int x=lm;
                if(jin>0){
                    temp[x]=jin;
                    x++;
                }for(int j=0;j<x;j++){
                    s[j]=temp[x-1-j]+'0';//再倒序存入(即为正序)
                    s[x]='\0';//确保字符串正常结束(不然会WA   /(ㄒoㄒ)/~~)
                }printf("Case %d:\n",i);
                printf("%s + %s = %s\n",a,b,s);
            }
            return 0;
        }
        
        • 0
          @ 2025-9-13 23:35:20
          from math import sqrt,ceil,gcd,log;re=lambda:map(int,input().strip().split())
          t, = re()
          for i in range(t):
              a, b = re()
              print(f"Case {i + 1}:")
              print(f"{a} + {b} = {a + b}")
          
          • 0
            @ 2025-5-2 9:05:11

            感谢Python的无限大int😄

            for i in range(int(input())):
                print("Case %d:"%(i+1))
                a,b=input().split()
                print(a+" + "+b+" = ",end='')
                print(int(a)+int(b))
            
            • 0
              @ 2024-11-27 20:40:47
              可能有点写的不太好,有错误可指出
              #include<stdio.h>
              #include<string.h>
              
              void jinwei(char *num1,char *num2,char*sum)
              {
              	//为了方便进行进位加法,先将字符串进行反转
              
              	//反转之前先计算长度
              	int len1 = strlen(num1);
              	int len2 = strlen(num2);
              
              	//对数组num1进行反转
              	for(int i=0;i<len1/2;i++)
              	{
              		char temp = num1[i];
              		num1[i] = num1[len1-1-i];
              		num1[len1-i-1] = temp;
              	}
              	//对数组num2进行反转
              
              	for(int i=0;i<len2/2;i++)
              	{
              		char temp = num2[i];
              		num2[i] = num2[len2-i-1];
              		num2[len2-i-1] = temp;
              	}
              
              	//下面进行加法进位
              
              	//加法之前先算出和的数的大概位数
              	int maxlen = (len1 > len2)?len1:len2;
              	int yushu = 0;
              	for(int i=0;i<maxlen;i++)
              	{
              		int dight1 = (i<len1)?num1[i] - '0':0;
              		int dight2 = (i<len2)?num2[i] - '0':0;
              
              		int su = dight1 + dight2 + yushu;
              		sum[i] = (su%10) + '0';
              		yushu = su/10;
              	}
              	if(yushu>0)
              	{
              		sum[maxlen] = yushu + '0';
              		maxlen++;
              	}
              
              	//把结果字符串进行反转
              	for(int i=0;i<maxlen/2;i++)
              	{
              		char temp = sum[i];
              		sum[i] = sum[maxlen-i-1];
              		sum[maxlen-i-1] = temp;
              	}
              		sum[maxlen] = '\0';
              }
              int main()
              {
              	int n;
              	scanf("%d",&n);
              	int x = 1;
              	while(n--)
              	{
              		char a[1000] = {0};
              		char b[1000] = {0};
              		char result[1000] = {0};
              		scanf("%s",a);
              		scanf("%s",b);
              		char c[1000] = {0};
              		char d[1000] = {0};
              		int len1 = strlen(a);
              		int len2 = strlen(b);
              		strcpy(c,a);
              		strcpy(d,b);
              		c[len1] = '\0';
              		d[len2] = '\0';
              		jinwei(a,b,result);
              		printf("Case %d:\n",x);
              		x++;
              		printf("%s + %s = %s\n",c,d,result);
              	}
              }
              
              • 1

              信息

              ID
              165
              时间
              3000ms
              内存
              128MiB
              难度
              8
              标签
              (无)
              递交数
              1536
              已通过
              188
              上传者