C语言 c++ 编程 转换
发布网友
发布时间:2022-05-19 00:24
我来回答
共5个回答
热心网友
时间:2023-11-24 09:33
这个可以用三位三位分开
比如
1,111,111,111
每三位是按照1000以内的读,三位与三位之间是用百万,亿,千这样的读法的。我以前做过的
下面的是英文转数字的代码,数字转英文的思想是差不多的。
#include<stdio.h>
#include<string.h>
main()
{
int sum,i,sign,len,j,k,temp;
char num[1000],n[1000];
while(gets(num)&&strcmp(num,"\0")!=0)
{
sign=1;
len=strlen(num);
sum=0;
temp=0;
for(j=i=0;;i++,j++)
{
n[j]=num[i];
if(n[j]==' '||n[j]=='\0')
{
n[j]='\0';
j=-1;
if(strcmp(n,"negative")==0)
sign=-1;
else if(strcmp(n,"zero")==0)
temp+=0;
else if(strcmp(n,"one")==0)
temp+=1;
else if(strcmp(n,"two")==0)
temp+=2;
else if(strcmp(n,"three")==0)
temp+=3;
else if(strcmp(n,"four")==0)
temp+=4;
else if(strcmp(n,"five")==0)
temp+=5;
else if(strcmp(n,"six")==0)
temp+=6;
else if(strcmp(n,"seven")==0)
temp+=7;
else if(strcmp(n,"eight")==0)
temp+=8;
else if(strcmp(n,"nine")==0)
temp+=9;
else if(strcmp(n,"ten")==0)
temp+=10;
else if(strcmp(n,"eleven")==0)
temp+=11;
else if(strcmp(n,"twelve")==0)
temp+=12;
else if(strcmp(n,"thirteen")==0)
temp+=13;
else if(strcmp(n,"fourteen")==0)
temp+=14;
else if(strcmp(n,"fifteen")==0)
temp+=15;
else if(strcmp(n,"sixteen")==0)
temp+=16;
else if(strcmp(n,"seventeen")==0)
temp+=17;
else if(strcmp(n,"eighteen")==0)
temp+=18;
else if(strcmp(n,"nineteen")==0)
temp+=19;
else if(strcmp(n,"twenty")==0)
temp+=20;
else if(strcmp(n,"thirty")==0)
temp+=30;
else if(strcmp(n,"forty")==0)
temp+=40;
else if(strcmp(n,"fifty")==0)
temp+=50;
else if(strcmp(n,"sixty")==0)
temp+=60;
else if(strcmp(n,"seventy")==0)
temp+=70;
else if(strcmp(n,"eighty")==0)
temp+=80;
else if(strcmp(n,"ninety")==0)
temp+=90;
else if(strcmp(n,"hundred")==0)
temp*=100;
else if(strcmp(n,"thousand")==0)
{
temp*=1000;
sum+=temp;
temp=0;
}
else if(strcmp(n,"million")==0)
{
temp*=1000000;
sum+=temp;
temp=0;
}
}
if(num[i]=='\0')
break;
}
sum+=temp;
sum*=sign;
printf("%d\n",sum);
}
}
热心网友
时间:2023-11-24 09:33
这个可以用三位三位分开
比如
1,111,111,111
每三位是按照1000以内的读,三位与三位之间是用百万,亿,千这样的读法的。我以前做过的
下面的是英文转数字的代码,数字转英文的思想是差不多的。
#include<stdio.h>
#include<string.h>
main()
{
int sum,i,sign,len,j,k,temp;
char num[1000],n[1000];
while(gets(num)&&strcmp(num,"\0")!=0)
{
sign=1;
len=strlen(num);
sum=0;
temp=0;
for(j=i=0;;i++,j++)
{
n[j]=num[i];
if(n[j]==' '||n[j]=='\0')
{
n[j]='\0';
j=-1;
if(strcmp(n,"negative")==0)
sign=-1;
else if(strcmp(n,"zero")==0)
temp+=0;
else if(strcmp(n,"one")==0)
temp+=1;
else if(strcmp(n,"two")==0)
temp+=2;
else if(strcmp(n,"three")==0)
temp+=3;
else if(strcmp(n,"four")==0)
temp+=4;
else if(strcmp(n,"five")==0)
temp+=5;
else if(strcmp(n,"six")==0)
temp+=6;
else if(strcmp(n,"seven")==0)
temp+=7;
else if(strcmp(n,"eight")==0)
temp+=8;
else if(strcmp(n,"nine")==0)
temp+=9;
else if(strcmp(n,"ten")==0)
temp+=10;
else if(strcmp(n,"eleven")==0)
temp+=11;
else if(strcmp(n,"twelve")==0)
temp+=12;
else if(strcmp(n,"thirteen")==0)
temp+=13;
else if(strcmp(n,"fourteen")==0)
temp+=14;
else if(strcmp(n,"fifteen")==0)
temp+=15;
else if(strcmp(n,"sixteen")==0)
temp+=16;
else if(strcmp(n,"seventeen")==0)
temp+=17;
else if(strcmp(n,"eighteen")==0)
temp+=18;
else if(strcmp(n,"nineteen")==0)
temp+=19;
else if(strcmp(n,"twenty")==0)
temp+=20;
else if(strcmp(n,"thirty")==0)
temp+=30;
else if(strcmp(n,"forty")==0)
temp+=40;
else if(strcmp(n,"fifty")==0)
temp+=50;
else if(strcmp(n,"sixty")==0)
temp+=60;
else if(strcmp(n,"seventy")==0)
temp+=70;
else if(strcmp(n,"eighty")==0)
temp+=80;
else if(strcmp(n,"ninety")==0)
temp+=90;
else if(strcmp(n,"hundred")==0)
temp*=100;
else if(strcmp(n,"thousand")==0)
{
temp*=1000;
sum+=temp;
temp=0;
}
else if(strcmp(n,"million")==0)
{
temp*=1000000;
sum+=temp;
temp=0;
}
}
if(num[i]=='\0')
break;
}
sum+=temp;
sum*=sign;
printf("%d\n",sum);
}
}
热心网友
时间:2023-11-24 09:33
这个要什么算法啊,纯粹枚举啊
1 设两个数组,数组1={ ONE ,TWO,....... }
数组2={1,2,3,。。。100,1000,10000,1000000}
数组1要把英文的1,2,3,。。10,11,12,。。20,30,40.。。。百,千、万,等收集全,数组2和数组1对应为数字,当然可以加上负号和小数点
2,对输入的字符串进行分解,这个不用我教你了吧,遇到空格算一个,然后从数组1中找到位置,从数组2中提取内容,如果遇到百千万,就乘了再加后边的,等等吧
其他的自己处理一下,算法理清了就行了追问谢谢思路!
热心网友
时间:2023-11-24 09:33
这个要什么算法啊,纯粹枚举啊
1 设两个数组,数组1={ ONE ,TWO,....... }
数组2={1,2,3,。。。100,1000,10000,1000000}
数组1要把英文的1,2,3,。。10,11,12,。。20,30,40.。。。百,千、万,等收集全,数组2和数组1对应为数字,当然可以加上负号和小数点
2,对输入的字符串进行分解,这个不用我教你了吧,遇到空格算一个,然后从数组1中找到位置,从数组2中提取内容,如果遇到百千万,就乘了再加后边的,等等吧
其他的自己处理一下,算法理清了就行了追问谢谢思路!
热心网友
时间:2023-11-24 09:33
C-Free编译通过,大概就是这样
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
string num,en_num="";
cin>>num;
int i=num.length();
while(i>=0)
{
switch(num[i])
{
case '0':
en_num="zero "+en_num;
break;
case '1':
en_num="one "+en_num;
break;
case '2':
en_num="two "+en_num;
break;
case '3':
en_num="three "+en_num;
break;
case '4':
en_num="four "+en_num;
break;
case '5':
en_num="five "+en_num;
break;
case '6':
en_num="six "+en_num;
break;
case '7':
en_num="seven "+en_num;
break;
case '8':
en_num="eight "+en_num;
break;
case '9':
en_num="nine "+en_num;
break;
case '.':
en_num="point "+en_num;
}
i--;
}
cout<<en_num<<endl;
return 0;
}
热心网友
时间:2023-11-24 09:33
C-Free编译通过,大概就是这样
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
string num,en_num="";
cin>>num;
int i=num.length();
while(i>=0)
{
switch(num[i])
{
case '0':
en_num="zero "+en_num;
break;
case '1':
en_num="one "+en_num;
break;
case '2':
en_num="two "+en_num;
break;
case '3':
en_num="three "+en_num;
break;
case '4':
en_num="four "+en_num;
break;
case '5':
en_num="five "+en_num;
break;
case '6':
en_num="six "+en_num;
break;
case '7':
en_num="seven "+en_num;
break;
case '8':
en_num="eight "+en_num;
break;
case '9':
en_num="nine "+en_num;
break;
case '.':
en_num="point "+en_num;
}
i--;
}
cout<<en_num<<endl;
return 0;
}
热心网友
时间:2023-11-24 09:34
这个属于人类语言学范畴额....
处理这个好麻烦的。要合理的写一个人类语言的算法,做不来,你加油吧。
穷举的方法也太傻了,效率上不说,如果有1亿,那岂不是要定义一亿个?追问谢谢了~!
热心网友
时间:2023-11-24 09:34
这个属于人类语言学范畴额....
处理这个好麻烦的。要合理的写一个人类语言的算法,做不来,你加油吧。
穷举的方法也太傻了,效率上不说,如果有1亿,那岂不是要定义一亿个?追问谢谢了~!
热心网友
时间:2023-11-24 09:35
英语总共才几个量词 百 千 百万 十亿 就用这几个来做判断就行了比如 1052你就判断是否大于一千小于百万 除以1000 然后分析余数是否过百 小数点也可按相同方法追问谢谢啊! 数字转文字已经解决了 , 文字转数字 有点不太准确 做的
追答貌似下面的可以可以。。。没验证 不过我想思路应该是对的
热心网友
时间:2023-11-24 09:35
英语总共才几个量词 百 千 百万 十亿 就用这几个来做判断就行了比如 1052你就判断是否大于一千小于百万 除以1000 然后分析余数是否过百 小数点也可按相同方法追问谢谢啊! 数字转文字已经解决了 , 文字转数字 有点不太准确 做的
追答貌似下面的可以可以。。。没验证 不过我想思路应该是对的