//利用最原始,最容易懂的方法:通过计算出加多的路程,然后将显示的路程减去加多的路程就得到实际的路程!其过程利用到递推的关系!
#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;
}
//利用最原始,最容易懂的方法:通过计算出加多的路程,然后将显示的路程减去加多的路程就得到实际的路程!其过程利用到递推的关系!#include "iostream"using namespace std;int main(){ int n; while (cin >> n && n != 0) { int temp1 = n, temp2 = n, count =