查看提交统计提问 总时间限制: 1000ms 内存限制: 65536kB
描述 一个十进制自然数,它的七进制与九进制表示都是三位数,且七进制与九进制的三位数码表示顺序正好相反。编程求此自然数,并输出显示。
输入 无。
输出 三行: 第一行是此自然数的十进制表示; 第二行是此自然数的七进制表示; 第三行是此自然数的九进制表示。
题解 1.首先要搞明白的是七进制等不同进制与十进制之间的关系 进制转换: for example:此题中我们需要用七进制来转换成十进制(即将七进制转换成十进制),用第n位上的数来乘7n-1,(123)7就用1×72+2×71+3×70=66; 2.在搞明白进制换算之后,这道题的思路遍十分清晰了。第一步便定义三个int变量分别代表这个三位数每一位上的数字。
int i,j,k;接着我们便用循环的方式一次次让计算机调试出符合条件的数字
for(i=1;i<7;i++) //最高位不能为0所以从1开始循环 for(j=0;j<7;j++) for(k=0;k<7;k++)然后当符合条件的数字出现之后将i j k三个数字拼成需要输出的数字
if(i*49+j*7+k==k*81+j*9+i) //这里用的便是之前讲的七进制转换十进制,分别将七九进制全部转换之后用十进制来作为等量。 { printf("%d\n",i*49+j*7+k); //输出十进制 printf("%d%d%d\n",i,j,k); //输出七进制 printf("%d%d%d",k,j,i); //输出九进制 }所以最后整理之后答案如下
#include <bits/stdc++.h> using namespace std; int main(){ int i,j,k; for(i=1;i<7;i++) for(j=0;j<7;j++) for(k=0;k<7;k++) if(i*49+j*7+k==k*81+j*9+i){ printf("%d\n",i*49+j*7+k); printf("%d%d%d\n",i,j,k); printf("%d%d%d",k,j,i); } return 0; }如果觉得写的不错就点个关注吧 不妨一键三连支持一下
