|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
题目要求找出最大的回文数,并且是由两个三位数相乘。
为什么我的输出是0呀。最好是指出我代码里的问题,新写一段代码我还是不知道原来为什么错,谢谢各位了
我的代码:
- #include<stdio.h>
- int main(){
- int i,j,g,temp;
- long num,new=0,result;
- for(i=100;i<1000;i++){
- for(j=100;j<1000;j++){
- num= i*j; //所有3位数的乘积
- temp =num;
- while(temp){
- g=temp%10;
- new =10*new+g;
- temp=temp/10; //得到原来数的倒置数
- }
- if(new==num){ //判断两个数是否相等
- result=new;
- }
- }
- }
- printf("三位数乘得的最大回文数:%ld\n",result);
- return 0;
- }
复制代码
判断一个数是否为回文数,你可以先求该数的倒置数(比如 123 的倒置数是 321),如果倒置数等于本身,那么就说明这是一个回文数。
一个普通的十进制数,比如 123 可以看成是 1 * 10^2 + 2 * 10^1 + 3 * 10^0,那么对应的倒置数就应该是 3 * 10^2 + 2 * 10^1 + 1 * 10^0。
好了,你开始上道了……
那如何求出这个十百位上的 1、2、3 呢?
没错,通过与 10 相除和求余可以得到。
比如:123 % 10 = 3, 123 / 10 = 12 -> 12 % 10 = 2, 12 / 10 = 1 -> 1 % 10 = 1, 1 / 10 = 0
写代码就是:
- i = num;
- j = 0;
- while (i)
- {
- j = j * 10 + i % 10;
- i = i / 10;
- }
复制代码
本帖最后由 lilu7688x 于 2019-3-9 19:17 编辑
- new = 0;
- while(temp)
- {
- g = temp % 10;
- new = 10 * new + g;
- temp = temp / 10; //得到原来数的倒置数
- }
- if(new == num && new > result )
- { //判断两个数是否相等
- result = new;
- }
复制代码
new=0 每次比对前重置一下
|
|