题目大意:略。
解题思路:一个数字的情况 + 是0的情况(连续0只取一个0的情况 + 万位为0的情况(一亿的情况 + 非一亿的情况))+ 普遍不是0的情况。
附加题目:打开链接
AC 代码
#include<bits/stdc++.h> #include<cmath> #define mem(a,b) memset(a,b,sizeof a); using namespace std; typedef long long ll; int main() { // const char unit[10]={' ',' ','S','B','Q','W','S','B','Q','Y'}; // 这种写法报格式错误 // const char num[10]={'a','b','c','d','e','f','g','h','i','j'}; char unit[10],num[10]; unit[2] = 'S'; unit[3] = 'B'; unit[4] = 'Q'; unit[5] = 'W'; unit[6] = 'S'; unit[7] = 'B'; unit[8] = 'Q'; unit[9] = 'Y'; num[0] = 'a'; num[1] = 'b'; num[2] = 'c'; num[3] = 'd'; num[4] = 'e'; num[5] = 'f'; num[6] = 'g'; num[7] = 'h'; num[8] = 'i'; num[9] = 'j'; string s; while(cin>>s) { int len=s.length(); if(len==1) // 输入只有一位,单独考虑 printf("%c",num[s[0]-48]); else { for(int i=0;i<len;i++) { if(s[i]-48!=0) // 数位上不为0的情况 printf("%c%c",num[s[i]-48],unit[len-i]); else if(i<len-1 && i!=len-5 && s[i]-48==0 && s[i+1]-48!=0) // 数位上是0的情况,有多个连续的0,只输出一个 printf("%c",num[s[i]-48]); else if(len>5 && i==len-5 && s[i]-48==0) // 万位是0的情况 { if(len==9 && s[1]-48==0 && s[2]-48==0 && s[3]-48==0){ } // 1亿的情况 else printf("W"); } } } } return 0; }