sicily 1240

来源:互联网 发布:淘宝冷库门密封胶条 编辑:程序博客网 时间:2024/06/03 22:49
//利用最原始,最容易懂的方法:通过计算出加多的路程,然后将显示的路程减去加多的路程就得到实际的路程!其过程利用到递推的关系!#include "iostream"using namespace std;int main(){int n;while (cin >> n && n != 0){int temp1 = n, temp2 = n, count = 0;while (temp1 > 0){temp1 /= 10;count++;}int *a = new int[count];for (int i = 0; i < count; i++)//分离出个,十,百,千。。。{a[i] = temp2 % 10;temp2 /= 10;}int sum = 0;for (int i = 0; i < count; i++)//计算出加多了的路程!{switch(i){case 0:{if (a[i] > 3)  sum += 1;else sum += 0;}break;case 1:{if (a[i] > 3)  sum += 10 + (a[i]-1);else sum += a[i];}break;case 2:{if (a[i] > 3)  sum += 100 + (a[i]-1)*19;else sum += a[i]*19;}break;case 3:{if (a[i] > 3)  sum += 1000 + (a[i]-1)*(100+9*19);else sum += a[i]*(100+9*19);}break;case 4:{if (a[i] > 3)  sum += 10000+(a[i]-1) * (9*(9*19 + 100)+1000);else sum += a[i] * (9*(9*19 + 100)+1000);}break;case 5:{if (a[i] > 3)  sum += 100000 +(a[i]-1)*(9*(9*(9*19 + 100)+1000)+10000);else sum += a[i]*(9*(9*(9*19 + 100)+1000)+10000);}break;case 6:{if (a[i] > 3)  sum += 1000000+(a[i]-1)*(9*(9*(9*(9*19 + 100)+1000)+10000)+100000);else sum += a[i]*(9*(9*(9*(9*19 + 100)+1000)+10000)+100000);}break;case 7:{if (a[i] > 3)  sum += 10000000+(a[i]-1)*(9*(9*(9*(9*(9*19 + 100)+1000)+10000)+100000)+1000000);else sum += a[i]*(9*(9*(9*(9*(9*19 + 100)+1000)+10000)+100000)+1000000);}break;case 8:{if (a[i] > 3)  sum += 100000000+(a[i]-1)*(9*(9*(9*(9*(9*(9*19 + 100)+1000)+10000)+100000)+1000000)+10000000);else sum += a[i]*(9*(9*(9*(9*(9*(9*19 + 100)+1000)+10000)+100000)+1000000)+10000000);}break;}}cout << n  << ": "<< n - sum << endl;}}
 
通过网上找了找答案,发现利用进制的转换可以很简单的完成,但是不明白原理!这是一个很简单的问题
= =
把一个9进制数转换成10进制
不过这个9进制数的数字是0 1 2 3 5 6 7 8 9就是没有4
把4之后的数都减一然后就是真正的9进制数#include <iostream>   #include <string>   using namespace std;  string s;  int main() {      while(cin >> s && s != "0"){          int tmp;          int k = 1;          int i = s.size() - 1;         tmp = s[i] - '0';          if(s[i] > '4') tmp--;          for(i--; i >= 0; i--) {              k *= 9;              if(s[i] > '4') tmp += (s[i] - '0' - 1) * k;              else tmp += (s[i] - '0') * k;          }          cout << s << ": " << tmp << endl;      }      return 0;  }