题解 UVA10101 Bangla Numbers

思路

这题可能是我写过最崩溃的一道题了……

这道题本质上就是相当于给数字分段,分成个十百千位的形式。

刚开始用 string 写的,想法是从第一位暴力枚举到第十五位。但是当我用 uDebug 检查输出的时候发现有如下几个问题:

  1. 如果出现输出 00 的情况,对于暴力枚举可能不太友好。

  2. 洛谷 UVA 的样例输出一般都不太友好,如果你看 uDebug 的话会发现前面有空位的。

所以我的推荐是使用 long long 类型,这样的话分段可以直接除,就不需要一直写 s.substr() 了。

如果数字大于 77 为,我们可以把它分开之后分别输出。

AC 代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;

void PrintPeriod(ll a){
if(a>=10000000){
PrintPeriod(a/10000000);
cout << " kuti";
PrintPeriod(a%10000000);
}
else{
if(a>=100000) cout << " " << (a/100000) << " lakh";
a %= 100000LL;
if(a>=1000) cout << " " << (a/1000) << " hajar";
a %= 1000LL;
if(a>=100) cout << " " << (a/100) << " shata";
a %= 100;
if(a>0) cout << " " << a;
}
}

int main(){
int t=1;
ll n;
while(cin >> n){
printf("%4d.",t++);
PrintPeriod(n);
if(n==0)
printf(" 0");
cout << endl;
}
return 0;
}

AC 记录


题解 UVA10101 Bangla Numbers
https://sunnyli.咕咕咕.eu.org/solution-UVA10101/
作者
SunnyLi
发布于
2023年6月15日
许可协议