AcWing 1477. 拼写正确

问题描述:

给定一个非负整数 N,你的任务是计算 N 的所有数字的总和,并以英语输出总和的每个数字。

输入格式:

共一行,包含一个整数 N。

输出格式:

共一行,用英语输出总和的每个数字,单词之间用空格隔开。

数据范围

0 ≤ N ≤ 0≤ N≤ 0N 10100

输入样例:

12345

输出样例:

one five

算法

(字符串,分割) O ( ) O() O();

思路:
因为题目所给的N的范围已经远远超出了能存储下的范围,所以应该 考虑到使用字符串来解决,而字符和数字的转化就是-'0’的操作,所以用字符串做运算,就可以解决溢出的问题,最后在将数字映射之前准备好的数组中即可!

时间复杂度分析

取决于数字的长度。

原题链接

C++代码:

#include <iostream>
#include <cstring>
using namespace std;

string n;

int sum = 0; 
string word[] = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};

int main()
{
    cin >> n;
    
    for(auto c: n) sum += c - '0';  //求和
    
    string res = to_string(sum); //将sum转换成字符串
    
    for(auto r: res) cout << word[(r - '0')] << ' '; //将每一位映射到word[]中输出即可
 
    return 0;
    
}

Java代码:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int sum = 0;
        String[] word = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
        String str = sc.nextLine();

        //将字符串转成数字 累加
        for (int i = 0; i < str.length(); i++) {
            sum += str.charAt(i) - '0';
        }

        //将sum 转成 字符串 的三种方式
        String res = String.valueOf(sum);
        //String res = Integer.toString(sum);
        //String res = sum + "";

        //映射 输出
        for (int i = 0; i < res.length(); i++) {
            System.out.print(word[res.charAt(i) - '0'] + ' ');
        }
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值