[POJ]2719 Faulty Odometer 是指要一个数的情况
此题目是两个数的 所以就相当于特殊8进制解题就可以了
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char n[1000];
__int64 len = 0, s, k;
while (cin >> n)
{
if (n[0] == '0')break;
len = strlen(n);
for (int i = 0; i < len; i++) {
cout << n[i];
}
cout << ": ";
for (__int64 i = 0; i < len; i++)
{
if (n[i] >= '3'&& n[i]>='8')n[i]-=2;
else
{
if(n[i]>='3')n[i]--;
if(n[i]>='8')n[i]--;
}
}
s = 0;
k = 1;
for (int i = len - 1; i >= 0; i--) {
s += (n[i] - '0') * k;
k *= 8;
}
cout << s << endl;
memset(n,0,sizeof(n));
}
return 0;
}
附上poj2719的代码
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
char n[100];
int len = 0, s, k;
while (cin >> n)
{
if (n[0] == '0')break;
len = strlen(n);
for (int i = 0; i < len; i++) {
cout << n[i];
}
cout << ": ";
for (int i = 0; i < len; i++) {
if (n[i] >= '4')n[i]--;
}
s = 0;
k = 1;
for (int i = len - 1; i >= 0; i--) {
s += (n[i] - '0') * k;
k *= 9;
}
cout << s << endl;
}
return 0;
}
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
char n[100];
int len = 0, s, k;
while (cin >> n)
{
if (n[0] == '0')break;
len = strlen(n);
for (int i = 0; i < len; i++) {
cout << n[i];
}
cout << ": ";
for (int i = 0; i < len; i++) {
if (n[i] >= '4')n[i]--;
}
s = 0;
k = 1;
for (int i = len - 1; i >= 0; i--) {
s += (n[i] - '0') * k;
k *= 9;
}
cout << s << endl;
}
return 0;
}