pat_甲级_1005_Spell it right

本文介绍了一种处理大数位数求和并将其转换为英文单词输出的方法。通过使用string代替longlong类型,解决了10^100级别的大数存储问题。文章详细展示了如何将输入的大数每位相加,再将结果转换成英文单词输出的代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目如下链接:https://pintia.cn/problem-sets/994805342720868352/problems/994805519074574336

这道题思路很简单,就是把输入的N的每一位相加起来,得到的数针对每一位以英文输出,每一位之间要有空格。

例如:12345->求和得到15->输出one five

这道题给定的N的取值范围是 (≤10​^100​​)。

一开始使用了long long存储数据,总会有一个测试用例通不过。

然后想起来,long long的最大值:9223372036854775807 long long的最小值:-9223372036854775808

根本存不了10的100次方的数字。

所以改用了string来存储,代码如下:

#include <iostream>

#include <string>

using namespace std;

int main(int argc, const char * argv[]) {

    string num;//10^100超过long long的取值范围

    int sum=0;

    string sum_str;

    string number[10]={"zero","one","two","three","four","five","six","seven","eight","nine"};

    cin>>num;

    

    for (long long i=0; i<num.length(); i++) {

        sum+=(num[i]-'0');

    }

    sum_str = to_string(sum);

    cout<<number[(sum_str[0]-'0')];

    for (long long i=1; i<sum_str.length(); i++) {

        cout<<" "<<number[(sum_str[i]-'0')];

    }

    return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值