一、先知道怎么读数
读数的方法参考链接:
读数的方法https://zhidao.baidu.com/question/128042337.html?sort=11&rn=5&pn=0#wgt-answers
二、分析方法
我们可以先把位数的称呼储存在一个数组里,再来一个个位数的转换的数组。要注意0十分特殊,需要判断它要不要输出。1也要判断,因为平时我们都说“十万零一十”,不说“一十万零一十”。负数输出“负”取绝对值。注意只有一个0要特判!
三、代码实现
先定义数位数组:
string shuwei[103]={"占位置的","","十","百","千","万","十","百","千","亿","十","百","千","万","十","百","千","兆","十","百","千","万","十","百","千","亿"};
注意这里万后面跟着十,要不然最后比如6666666就是“六百万六十万六万六千六百六十六”了。
然后再定义个位数转换数组:
string chinese[103]={"?","一","二","三","四","五","六","七","八","九"};
这里不需要0,因为反正都要特判,直接就输出了。
核心代码:
while(n){
now++;
int a=n%10;
if(a!=0)
if(a==1&&now%4==2&&n/10==0)
ans=shuwei[now]+ans;
else
ans=chinese[a]+shuwei[now]+ans;
else
if(last!=0&&now%4!=1&&n/10)
ans="零"+ans;
else
if(now%4==1)
ans=shuwei[now]+ans;
last=a;
n/=10;
}
四、完整代码
完整代码如下:
#include<bits/stdc++.h>
using namespace std;
int main(){
string chinese[103]={"?","一","二","三","四","五","六","七","八","九"};
string shuwei[103]={"占位置的","","十","百","千","万","十","百","千","亿","十","百","千","万","十","百","千","兆","十","百","千","万","十","百","千","亿"};
string ans="";
long long n,now=0;
int last=0;
cout<<"请输入一个整数:";
cin>>n;
cout<<"这个数读作:";
if(n<0){
cout<<"负";
n=abs(n);
}
if(n==0)
cout<<"零";
while(n){
now++;
int a=n%10;
if(a!=0)
if(a==1&&now%4==2&&n/10==0)
ans=shuwei[now]+ans;
else
ans=chinese[a]+shuwei[now]+ans;
else
if(last!=0&&now%4!=1&&n/10)
ans="零"+ans;
else
if(now%4==1)
ans=shuwei[now]+ans;
last=a;
n/=10;
}
cout<<ans;
return 0;
}