由这个程序想到的几个小问题
由这个程序想到的几个问题
这个是一个数和它的倒序数相加,如果结果是回文数则返回,否则继续
#include <stdio.h>
#define max 217483647
long re(long int a)
{
long int t;
for(t=0;a> 0;a/=10)
t=t*10+a%10;
return(t);
}
long nonre(long int s)
{
if(re(s)==s)return(1);
else return(0);
}
void main()
{
long int n,m;
m = 0;
int count=0;
printf( "enter the number: ");
scanf( "%ld ",&n);
m = re(n);
while(!nonre(m+n))
{
if(m+n> max){
printf( "shao shu fan wei ");
break;
}
else{
printf( "[%d]:%ld+%ld=%ld\n ",++count,n,m,m+n);
n+=m;
}
m = re(n);
}
printf( "[%d]:%ld+%ld=%ld\n ",++count,n,m,m+n);
printf( "here is the end\n ");
}
一,turn(t)和turn t有什么区别
二.long nonre(long int s)
{
if(re(s)==s)return(1);
else return(0);
}
turn(1)和turn(0)是什么意思
三.这个程序是实现十进制的倒序,如果是别的进制呢,我试过二进制的
long re(long int a)
{
long int t;
for(t=0;a> 0;a/=10)
t=t*10+a%10;
return(t);
}
把这个子程序的10都改为2,好像不行
说真的对这个程序的理解我还是不太懂,
高手可以详细解释下.谢谢
------解决方案--------------------
1.没什么区别,只要编译器能通过就可以
2。这是函数返回值,你可以根据它作为下步操作的依据,如果返回1,你要做什么,返回0,你又做什么
3。这是十进制下的回文,你要改为二进制,要改的地方不只这一个
------解决方案--------------------
long nonre(long int s)
{
if(re(s)==s)return(1);
else return(0);
}
如果re(s)返回和s相同的东西,返回1
如果不是则返回0
------解决方案--------------------
return (t)和return t是一样的。
------解决方案--------------------
2。while(!nonre(m+n))这里就是根据nonre(m+n)它的返回值来判m+n是否为回文,如果返回值为1;代表m+n是回文,如果不是,返回为零,那么(!nonre(m+n))为1,while继续循环,知道找到为回文结束
------解决方案--------------------
三.这个程序是实现十进制的倒序,如果是别的进制呢,我试过二进制的
long re(long int a)
{
long int t;
for(t=0;a> 0;a/=10)
t=t*10+a%10;
return(t);
}
-------------
要使用二进制最好使用位移,也就是内存移动的方式来解决。
但针对这个函数是无需使用那个方法的,因为long int a是以十进制存在的。
这个是一个数和它的倒序数相加,如果结果是回文数则返回,否则继续
#include <stdio.h>
#define max 217483647
long re(long int a)
{
long int t;
for(t=0;a> 0;a/=10)
t=t*10+a%10;
return(t);
}
long nonre(long int s)
{
if(re(s)==s)return(1);
else return(0);
}
void main()
{
long int n,m;
m = 0;
int count=0;
printf( "enter the number: ");
scanf( "%ld ",&n);
m = re(n);
while(!nonre(m+n))
{
if(m+n> max){
printf( "shao shu fan wei ");
break;
}
else{
printf( "[%d]:%ld+%ld=%ld\n ",++count,n,m,m+n);
n+=m;
}
m = re(n);
}
printf( "[%d]:%ld+%ld=%ld\n ",++count,n,m,m+n);
printf( "here is the end\n ");
}
一,turn(t)和turn t有什么区别
二.long nonre(long int s)
{
if(re(s)==s)return(1);
else return(0);
}
turn(1)和turn(0)是什么意思
三.这个程序是实现十进制的倒序,如果是别的进制呢,我试过二进制的
long re(long int a)
{
long int t;
for(t=0;a> 0;a/=10)
t=t*10+a%10;
return(t);
}
把这个子程序的10都改为2,好像不行
说真的对这个程序的理解我还是不太懂,
高手可以详细解释下.谢谢
------解决方案--------------------
1.没什么区别,只要编译器能通过就可以
2。这是函数返回值,你可以根据它作为下步操作的依据,如果返回1,你要做什么,返回0,你又做什么
3。这是十进制下的回文,你要改为二进制,要改的地方不只这一个
------解决方案--------------------
long nonre(long int s)
{
if(re(s)==s)return(1);
else return(0);
}
如果re(s)返回和s相同的东西,返回1
如果不是则返回0
------解决方案--------------------
return (t)和return t是一样的。
------解决方案--------------------
2。while(!nonre(m+n))这里就是根据nonre(m+n)它的返回值来判m+n是否为回文,如果返回值为1;代表m+n是回文,如果不是,返回为零,那么(!nonre(m+n))为1,while继续循环,知道找到为回文结束
------解决方案--------------------
三.这个程序是实现十进制的倒序,如果是别的进制呢,我试过二进制的
long re(long int a)
{
long int t;
for(t=0;a> 0;a/=10)
t=t*10+a%10;
return(t);
}
-------------
要使用二进制最好使用位移,也就是内存移动的方式来解决。
但针对这个函数是无需使用那个方法的,因为long int a是以十进制存在的。