#include<iostream>
using namespace std;
void printNumber( long long n ){
if( n == 0 ) return;
if( n/10000000 ){
printNumber( n/10000000 );
cout<<" kuti";
n %= 10000000;
}
if( n/100000 ){
printNumber( n/100000 );
cout<<" lakh";
n %= 100000;
}
if( n/1000 ){
printNumber( n/1000 );
cout<<" hajar";
n %= 1000;
}
if( n/100 ){ //764
printNumber( n/100 );
cout<<" shata";
n %= 100;
}
if( n ) cout<<" "<<n;
}
int main(){
long long n;
int serialNumber = 1;//serialNumber是每筆測試資料的編號
while(cin >> n && n != 0){
cout<<serialNumber<<".";
if( n ) printNumber( n );
serialNumber++;
}
return 0;
}
上面程式碼原作者在這http://knightzone.org/?p=1789,我稍微修改,功能也完整來追蹤一次,設n=764
第一次在main中printNumber(n)呼叫,先做if( n/100 )的敘述,
第二次在if( n/100 )中的printNumber(n/100)呼叫遞迴,764/100=7,丟進7這參數進去,
最後會執行第30行的if,印出7,這次呼叫完畢。
會回到第一次繼續執行,故印出 shata,接著再執行n %= 100; n計算後為64
再做30行敘述,印出64
而其他同理,因數字大就不追蹤了。
以下是我寫失敗的程式碼:
//http://bit.ly/2nDnxrI
//764 7 shata 64
#include<iostream>
using namespace std;
int howManyPlace(int n){//回傳這個數字有幾位數
int count = 0;
while (n != 0) {
n = n / 10;
count++;
}
return count;
}
int main() {
int serialNumber = 0;
int n = 0;
while (cin >> n && n != 0) {
serialNumber++;
if(howManyPlace(n) == 3){
cout<<serialNumber<<". "<<n/100<<" shata "<<n%100;
}
if(howManyPlace(n) == 5){
int a,b,c;
a = n/1000;
b = (n%1000)/100;
c = n%100;
cout<<serialNumber<<". "<<a<<" hajar "<<b<<" shata "<<c;
}
}
return 0;
}
題目網址:http://bit.ly/2nDnxrI
沒有留言:
張貼留言