鱼C论坛

 找回密码
 立即注册
查看: 1358|回复: 6

以字符串的形式读入两个数字,编写一个函数计算它们的和,以字符串形式返回。

[复制链接]
发表于 2022-2-11 09:59:15 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
以字符串的形式读入两个数字,编写一个函数计算它们的和,以字符串形式返回。
数据范围:
len(s),len(t)≤100000,字符串仅由'0'~‘9’构成
要求:时间复杂度 O(n)
示例1
输入:"1","99"
返回值:"100"
说明:1+99=100   
求助大佬了!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-2-11 10:09:45 | 显示全部楼层
  1. def sum_words(number1,number2):
  2.     return "".join(("'",str(int(number1) + int(number2)),"'"))
  3. print(sum_words("1","99"))
  4. '100'
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-11 10:11:34 | 显示全部楼层

如果你不在意带不带双引号,只在意类型,可以这样写:
  1. def sum_words(number1,number2):
  2.     return str(int(number1) + int(number2))
  3. print(sum_words("1","99"))
  4. 100
复制代码


你 type() 一下,两种方法都是字符串,只不过第一种有双引号!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-11 11:07:36 From FishC Mobile | 显示全部楼层
C/C++?
我最多可以做到时间复杂度:O(2n)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-11 18:25:25 | 显示全部楼层
本帖最后由 jhq999 于 2022-2-11 18:28 编辑

复杂度O(2n) 除非可以用strlen,或者fscan,但这些函数里面也有循环
  1. void StrAdd(char (* num)[8])
  2. {
  3.        
  4.         int i=0,j=0,k=0;
  5.         while(num[0][i+1]||num[1][j+1])
  6.         {
  7.                 if (num[0][i+1])i++;
  8.                 if(num[1][j+1])j++;
  9.         }
  10.         k=i>j?i:j+1;
  11.         while (i>-1||j>-1)
  12.         {
  13.                 num[2][k]+=(i<0?'0':num[0][i])+(j<0?'0':num[1][j]);
  14.                 if (num[2][k]>105)
  15.                 {
  16.                         num[2][k]-='9'+1;
  17.                         num[2][k-1]++;
  18.                 }
  19.                 else if(num[2][k])
  20.                 {
  21.                         num[2][k]-='0';
  22.                 }
  23.                 i--,j--,k--;
  24.                
  25.         }
  26.         num[2][0]=num[2][0]?'1':'0';
  27.        
  28.         int cs=0;
  29. }
  30. int main()
  31. {
  32.         char num[3][8]={0};
  33.         scanf("%s%s",num[0],num[1]);
  34.         StrAdd(num);
  35.         printf("%s",num[2]);
  36.     return 0;
  37. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-11 22:44:36 | 显示全部楼层
本帖最后由 jhq999 于 2022-2-12 00:08 编辑
  1. int StrAdd(char (* num)[8])
  2. {

  3.          long long *a=(long long*)num[0],*b=(long long*)num[1],*c=(long long*)num[2];
  4.         *a=*a+*b;
  5.         int i=0;
  6.         while(num[0][i])
  7.         {
  8.                 if(num[0][i]>105)num[0][i+1]+=1,num[2][7-i]=num[0][i]-106+'0';
  9.                 else if(96<=num[0][i])num[2][7-i]=num[0][i]-96+'0';
  10.                 else num[2][7-i]=num[0][i]+'0';
  11.                
  12.                 i++;
  13.        
  14.         }
  15.         *c>>=8;
  16.         return i;

  17.        
  18.        
  19. }
  20. int main()
  21. {
  22.         int i=0;
  23.         char num[3][8]={0};
  24.         scanf("%s%s",num[0]+1,num[1]+1);
  25.        
  26.         for (i = 1; i <4 ; i++)//小端倒放
  27.         {
  28.                 num[0][0]=num[0][i];
  29.                 num[0][i]=num[0][7-i];
  30.                 num[0][7-i]=num[0][0];
  31.                 num[1][0]=num[1][i];
  32.                 num[1][i]=num[1][7-i];
  33.                 num[1][7-i]=num[1][0];
  34.         }
  35.         num[0][0]=num[1][0]='\0';
  36.         while (!num[0][0])*(long long *)num[0]>>=8;
  37.         while (!num[1][0])*(long long *)num[1]>>=8;
  38.         i=StrAdd(num);
  39.         printf("%s",num[2]+7-i);
  40.     return 0;
  41. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-12 00:06:26 | 显示全部楼层
本帖最后由 傻眼貓咪 于 2022-2-12 00:10 编辑

  1. #include <stdio.h>
  2. #include <malloc.h>

  3. typedef struct Node{
  4.     char c;
  5.     struct Node *next;
  6. }Number;

  7. int main()
  8. {
  9.     Number *A = NULL, *B = NULL, *C = NULL, *tail;
  10.     char c;
  11.     int flag = 1, sum, r = 0;
  12.     while((c = getchar()) != '\n'){
  13.         if(c == ' '){
  14.             flag = 0;
  15.             continue;
  16.         }
  17.         if(flag){
  18.             tail = A;
  19.             A = (Number*)malloc(sizeof(Number));
  20.             A->c = c;
  21.             A->next = tail;
  22.         }
  23.         else{
  24.             tail = B;
  25.             B = (Number*)malloc(sizeof(Number));
  26.             B->c = c;
  27.             B->next = tail;            
  28.         }
  29.     }
  30.     while(A || B || r){
  31.         Number *p = A;
  32.         Number *q = B;
  33.         tail = C;
  34.         C = (Number*)malloc(sizeof(Number));
  35.         if(A && B){
  36.             sum = (A->c - '0') + (B->c - '0') + r;
  37.             c = sum%10 + '0';
  38.             r = sum/10;
  39.             C->c = c;
  40.             A = A->next;
  41.             B = B->next;
  42.         }
  43.         else if(A){
  44.             sum = (A->c - '0') + r;
  45.             c = sum%10 + '0';
  46.             r = sum/10;
  47.             C->c = c;
  48.             A = A->next;
  49.         }
  50.         else if(B){
  51.             sum = (B->c - '0') + r;
  52.             c = sum%10 + '0';
  53.             r = sum/10;
  54.             C->c = c;
  55.             B = B->next;
  56.         }
  57.         else if(r){
  58.             C->c = r + '0';
  59.             r = 0;
  60.         }
  61.         C->next = tail;
  62.         free(p);
  63.         free(q);
  64.     }
  65.     while(C){
  66.         printf("%c", C->c);
  67.         Number *p = C;
  68.         C = C->next;
  69.         free(p);
  70.     }
  71.     free(A);
  72.     free(B);
  73.     free(C);
  74.     return 0;
  75. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-1 18:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表