1005 Spell It Right (20 分)

本文介绍了一种处理超大整数求和并将其结果的每一位数字转换为英文单词输出的算法实现。通过使用C++的vector容器和迭代器进行逐位加法计算,解决了传统算术运算无法处理的问题。

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

Given a non-negative integer N, your task is to compute the sum of all the digits of N, and output every digit of the sum in English.

Input Specification:

Each input file contains one test case. Each case occupies one line which contains an N (≤10​^100​​).

Output Specification:

For each test case, output in one line the digits of the sum in English words. ‎两个连续单词之间必须有一个空格, 但一行的末尾没有额外的空格。‎

Sample Input:

12345

Sample Output:

one five

注意事项:

(1)输入的数非常大,我们采用字符读取输入的格式存放数据

(2)加法计算无法采用算术运算的方式,我们可以自己设计加法计算过程

(3)用vector容器来存放数据,用iterator迭代器读取数据

(4)reverse_iterator迭代器可以逆序读取数据

(5)结尾不能有空格

PS:我看其他博主的文章大多数都没有考虑数据过大的情况,可能这个题目的评测点数值很小吧,不用我这么麻烦也可以过。

代码如下:

#include<bits/stdc++.h>
using namespace std;
string st[10] = {"zero" ,"one" ,"two" ,"three","four","five","six","seven","eight","nine" };
int main()
{
	vector<char>num;
	char c;
	while ((c = getchar()) != '\n')
	{	
		if(num.empty())	num.push_back('0');
		int b = c - '0';
		for (vector<char>::iterator iter = num.begin(); iter != num.end(); iter++)
		{
			int a = *iter - '0';
			int t = a + b;

			a = t % 10;
			*iter = a + '0';

			b = t / 10;
			if (!b)break;
		}
		if (b)num.push_back(b + '0');
	}
	for (vector<char>::reverse_iterator it = num.rbegin(); it != num.rend() - 1; it++)
	{
		cout << st[*it-'0']<<" ";
	}
	cout << st[num[0]-'0'];
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值