PTA第二个编程题总结
7-1?幣值轉換?(20 分)
輸入一個整數(位數不超過9位)代表一個人民幣值(單位為元),請轉換成財務要求的大寫中文格式。如23108元,轉換后變成“貳萬叁仟壹百零捌”元。為了簡化輸出,用小寫英文字母a-j順序代表大寫數字0-9,用S、B、Q、W、Y分別代表拾、百、仟、萬、億。于是23108元應被轉換輸出為“cWdQbBai”元。
輸入格式:
輸入在一行中給出一個不超過9位的非負整數。
輸出格式:
在一行中輸出轉換后的結果。注意“零”的用法必須符合中文習慣。
輸入樣例1:
813227345輸出樣例1:
iYbQdBcScWhQdBeSf輸入樣例2:
6900輸出樣例2:
gQjB實驗代碼:
#include <stdio.h>
int main(void)
{
? ? ? ? ? int a,b,c,d,e,n,i,j,m,N,k;
? ? ? ? ? scanf("%d",&N);
? ? ? ? ? a=b=N;
? ? ? ? ? if(a==0){
? ? ? ? ? ? ? ?printf("a");
? ? ?? ? ?}
? ? ?? ? ?for(i=0;a>0;i++){
? ? ?? ? ?? ? ?a=a/10;
? ? ?? ? ?}
? ? ?? ? ?c=i;
? ? ?? ? ?for(i;i>0;i--){
? ? ?? ? ?? ? ?n=1;
? ? ?? ? ?? ? ?e=0;
? ? ?? ? ?? ? ?for(m=i-1;m>0;m--){
? ? ?? ? ?? ? ?? ? ?n=n*10;
? ? ?? ? ?? ? ?}
? ? ?? ? ?? ? ?a=b/n;? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ?b=b-a*n;
? ? ?? ? ?? ? ?switch(a){
? ? ?? ? ?? ? ?? ? ? ? ? ? ? ?case 0: printf("a"); break;?case 1: printf("b"); break;?case 2: printf("c"); break;
? ? ?? ? ?? ? ?? ? ? ? ? ? ? ?
? ? ?? ? ?? ? ?? ? ? ? ? ? ? ?
? ? ?? ? ?? ?? ? ? ? ? ? ? ???case 3: printf("d"); break;?case 4: printf("e"); break;?case 5: printf("f"); break;
? ? ??? ? ? ? ? ? ? ?? ? ? ? ?
? ? ? ? ? ? ? ? ? ?? ??? ? ? ?
? ? ?? ? ?? ? ?? ? ? ? ? ? ? ?case 6: printf("g"); break;?case 7: printf("h"); break;?case 8: printf("i"); break;
? ? ? ? ? ? ? ???? ? ? ? ? ? ?
? ? ?? ? ?? ? ?? ? ? ? ? ? ? ?
? ? ?? ? ?? ?? ? ? ? ? ? ? ???case 9: printf("j"); break;
? ? ?? ? ?? ? ?}
? ? ?? ? ?? ? ?switch (i) {
? ??? ? ? ? ? ? ? ??? ? ?? ? ?case 2: printf("S"); break;?case 3: printf("B"); break;?case 4: printf("Q"); break;
? ? ???? ? ? ? ? ? ? ?? ? ? ??
? ? ?? ? ??? ? ? ? ? ? ? ?? ??
? ?? ? ? ? ? ? ? ???? ? ?? ? ?case 5: printf("W"); break;?case 6: printf("S"); break;?case 7: printf("B"); break;
? ?? ? ? ? ? ? ? ?? ? ? ? ? ??
? ? ???? ? ? ? ? ? ? ?? ? ? ??
? ? ?? ? ???? ? ? ? ? ? ? ?? ?case 8: printf("Q"); break;?case 9: printf("Y"); break;
? ? ?? ??? ? ? ? ? ? ? ?? ? ??
? ? ?? ? ?? ? ?}
? ? ?? ? ?? ? ?j=0;
? ? ?? ? ?? ? ?for(d=b;d>0;j++){
? ? ?? ? ?? ??? ? ? ? ? ? ? ??d=d/10;
? ? ?? ? ?? ? ?}
? ? ?? ? ?? ? ?j=i-j-1;
? ? ?? ? ?? ? ?if(c<9&&i>5&&j>2){
? ? ?? ? ?? ? ?? ??? ? ? ? ??printf("W");
? ? ?? ? ?? ? ?}
? ? ?? ? ?? ? ?j=0;
? ? ?? ? ?? ? ?for(d=b;d>0;j++){
? ? ? ? ? ? ?? ? ? ? ? ? ? ?d=d/10;
? ? ?? ? ?? ? ?}
? ? ?? ? ?? ? ?if(j!=0){
? ? ?? ? ?? ?? ? ? ? ? ? ? ???e=i-j-1;
? ? ?? ? ?? ? ?}else{
? ? ?? ? ?? ? ? ??? ? ? ? ??? i=0;
? ? ?? ? ?? ? ?}
? ? ?? ? ?? ? ?if(e>3&&i>4||e==2&&i<4){
? ? ? ? ? ? ?? ? ? ? ? ? ? ?printf("a");
? ? ?? ? ?? ? ?? ? ?? ? ? ??i=j+1;
? ? ?? ? ?? ? ?}else if(e==2&&i>1){
? ? ? ? ? ? ?? ? ? ? ? ? ? ?printf("a");
? ? ? ? ? ??? ? ? ? ? ? ???i=i-2;
? ? ?? ? ?? ? ?}else if(j<4&&c<9&&j!=0&&e!=1&&e!=0){
? ? ? ? ? ? ? ? ? ??? ? ? ??printf("a");
? ? ? ? ? ? ? ? ? ??? ? ? ??i=j+1;
? ? ?? ? ?? ? ?}else if(e==1){
? ? ?? ? ?? ? ?? ? ?printf("a");
? ? ?? ? ?? ? ?? ? ?i=j+1;
? ? ?? ? ?? ? ?}else{
? ? ?? ? ?? ? ?? ? ?i=j+1;
? ? ?? ? ?? ? ?? ? ?}
? ? ?? ? ?? ? ?}
? ? ?? ? ?? ? ?return 0;
? ? ?? ? ?}
先記錄輸出的數的位數,利用位數來確定輸出的大寫字母,運用循環來進行從高位數到低位數
進行判斷要輸出的小寫字母,用條件語句來判斷特殊情況。
實驗錯誤:
當時沒有想到位數小于9的情況下中間位數存在連續多個0的輸入的考慮。
實驗正確:
轉載于:https://www.cnblogs.com/dapeng1234/p/10414382.html
總結
以上是生活随笔為你收集整理的PTA第二个编程题总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: autoenv的使用方法
- 下一篇: c语言枚举类型变量的作用