试题链接如下:点击打开链接
试题要求翻译如下:
给定一个非负整数N,按位累加之后把和按位提取并转化成英文单词
例子:
input:12345
output: one five
代码设计如下:
#include <stdio.h>
#include <stdlib.h>
#include <map>
#include <string>
using namespace std;
map<int,string> digitMap;
void InitDigitMap()
{
digitMap.insert(make_pair(0,"zero"));
digitMap.insert(make_pair(1,"one"));
digitMap.insert(make_pair(2,"two"));
digitMap.insert(make_pair(3,"three"));
digitMap.insert(make_pair(4,"four"));
digitMap.insert(make_pair(5,"five"));
digitMap.insert(make_pair(6,"six"));
digitMap.insert(make_pair(7,"seven"));
digitMap.insert(make_pair(8,"eight"));
digitMap.insert(make_pair(9,"nine"));
}
int main()
{
int size = 0;
int sum = 0;
int three = -1;
int two = -1;
int one = -1;
char buffer[100] = {0};
InitDigitMap();
scanf("%s",&buffer);
size = strlen(buffer);
for (int i = 0; i < size; i++ )
{
if ( buffer[i] < 48 || buffer[i] > 57 )
{
printf("not digit!\n");
sum = 0;
break;
}
sum += ( buffer[i] - '0');
}
printf("the sum is %d\n",sum);
if ( sum >= 100 )
{
three = sum / 100;
sum = sum % 100;
}
if ( sum >= 10 )
{
two = sum / 10;
sum = sum % 10;
}
else
{
if ( three > -1 )
two = 0;
}
if ( sum >= 0 )
{
one = sum;
}
printf("%s %s %s\n", digitMap[three].c_str(), digitMap[two].c_str(), digitMap[one].c_str() );
return 0;
}