鱼C论坛

 找回密码
 立即注册
查看: 1587|回复: 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 | 显示全部楼层
def sum_words(number1,number2):
    return "".join(("'",str(int(number1) + int(number2)),"'"))
print(sum_words("1","99"))
'100'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

如果你不在意带不带双引号,只在意类型,可以这样写:
def sum_words(number1,number2):
    return str(int(number1) + int(number2))
print(sum_words("1","99"))
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,但这些函数里面也有循环
void StrAdd(char (* num)[8])
{
        
        int i=0,j=0,k=0;
        while(num[0][i+1]||num[1][j+1])
        {
                if (num[0][i+1])i++;
                if(num[1][j+1])j++;
        }
        k=i>j?i:j+1;
        while (i>-1||j>-1)
        {
                num[2][k]+=(i<0?'0':num[0][i])+(j<0?'0':num[1][j]);
                if (num[2][k]>105)
                {
                        num[2][k]-='9'+1;
                        num[2][k-1]++;
                }
                else if(num[2][k])
                {
                        num[2][k]-='0';
                }
                i--,j--,k--;
                
        }
        num[2][0]=num[2][0]?'1':'0';
        
        int cs=0;
}
int main()
{
        char num[3][8]={0};
        scanf("%s%s",num[0],num[1]);
        StrAdd(num);
        printf("%s",num[2]);
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

         long long *a=(long long*)num[0],*b=(long long*)num[1],*c=(long long*)num[2];
        *a=*a+*b;
        int i=0;
        while(num[0][i])
        {
                if(num[0][i]>105)num[0][i+1]+=1,num[2][7-i]=num[0][i]-106+'0';
                else if(96<=num[0][i])num[2][7-i]=num[0][i]-96+'0';
                else num[2][7-i]=num[0][i]+'0';
                
                i++;
        
        }
        *c>>=8;
        return i;

        
        
}
int main()
{
        int i=0;
        char num[3][8]={0};
        scanf("%s%s",num[0]+1,num[1]+1);
        
        for (i = 1; i <4 ; i++)//小端倒放
        {
                num[0][0]=num[0][i];
                num[0][i]=num[0][7-i];
                num[0][7-i]=num[0][0];
                num[1][0]=num[1][i];
                num[1][i]=num[1][7-i];
                num[1][7-i]=num[1][0];
        }
        num[0][0]=num[1][0]='\0';
        while (!num[0][0])*(long long *)num[0]>>=8;
        while (!num[1][0])*(long long *)num[1]>>=8;
        i=StrAdd(num);
        printf("%s",num[2]+7-i);
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

typedef struct Node{
    char c;
    struct Node *next;
}Number;

int main()
{
    Number *A = NULL, *B = NULL, *C = NULL, *tail;
    char c;
    int flag = 1, sum, r = 0;
    while((c = getchar()) != '\n'){
        if(c == ' '){
            flag = 0;
            continue;
        }
        if(flag){
            tail = A;
            A = (Number*)malloc(sizeof(Number));
            A->c = c;
            A->next = tail;
        }
        else{
            tail = B;
            B = (Number*)malloc(sizeof(Number));
            B->c = c;
            B->next = tail;            
        }
    }
    while(A || B || r){
        Number *p = A;
        Number *q = B;
        tail = C;
        C = (Number*)malloc(sizeof(Number));
        if(A && B){
            sum = (A->c - '0') + (B->c - '0') + r;
            c = sum%10 + '0';
            r = sum/10;
            C->c = c;
            A = A->next;
            B = B->next;
        }
        else if(A){
            sum = (A->c - '0') + r;
            c = sum%10 + '0';
            r = sum/10;
            C->c = c;
            A = A->next;
        }
        else if(B){
            sum = (B->c - '0') + r;
            c = sum%10 + '0';
            r = sum/10;
            C->c = c;
            B = B->next;
        }
        else if(r){
            C->c = r + '0';
            r = 0;
        }
        C->next = tail;
        free(p);
        free(q);
    }
    while(C){
        printf("%c", C->c);
        Number *p = C;
        C = C->next;
        free(p);
    }
    free(A);
    free(B);
    free(C);
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-18 13:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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