您的位置:首页 > 其它

PAT程序设计考题——甲级1005 数字按位累加(非负数字按位累加和转化成对应英文单词)

2016-01-08 18:05 501 查看
试题链接如下:点击打开链接

试题要求翻译如下:

给定一个非负整数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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息