c语言编程问题,高手请进!

将十进制转化为R进制
#include <stdio.h>
#define R 2
void main()
{
int i,j,k,m,n,a,b,c,x,y;
int f(int ,int );
printf("请输入一个数");
scanf("%d",&x);
for(i=0;i<2;i++)
for(j=0;j<2;j++)
for(k=0;k<2;k++)
for(m=0;m<2;m++)
for(n=0;n<2;n++)
for(a=0;a<2;a++)
for(b=0;b<2;b++)
for(c=0;c<2;c++)
if(x==f(0,R)*c+f(1,R)*b+f(2,R)*a+f(3,R)*n+f(4,R)*m+f(5,R)*k+f(6,R)*j+f(7,R)*i)
printf("x转化为%d进制为%d%d%d%d%d%d%d%d",R,i,j,k,m,n,a,b,c);
}
int f(int y,int R)
{
int s=1,y;
if(y==0)
return(1);
for(i=1;i<=y;i++)
s=s*R;
return(s);
}

第1个回答  2010-09-19
数学法:
原数为 a1a2……an;
从a1开始向后找到第一个ai比ai+1大的,删掉ai;
若找不到,删掉a1;

程序:
只用了一次循环,哈哈

#include <stdio.h>

int main()
{
char str[200];
printf( "Input a number : " );
scanf( "%s", str );

int flag = 0; /* 记录是否找到了要被删掉的数 */
char *p = str;

while ( *p ) /* 当*p != '\0'时 */
{
if ( flag ) /* 找到了要被删掉的数,则一次打印剩下的数 */
{
printf( "%s\n", p );
return 0;
}
else if ( *p <= *(p+1) ) /* 找到被删掉的数前,挨个打印 */
{
printf( "%c", *p );
}
else if ( *(p+1) ) /* 如果*(p+1)!='\0'的话,则找到了被删掉的数 */
{
flag = 1;
}
++p;
}

if ( !flag ) /* 如果一遍循环并没有找到要被删掉的数 */
{
printf( "%c", *(p-1) ); /* 因为上面的while只会打印n-1个数,所以要补上最后一个数 */
printf( "\r \n" ); /* 用空格将应该删掉的第一个数覆盖掉,比较偷懒的方法 */
}

return 0;
}

如果对您有帮助,请记得采纳为满意答案,谢谢!祝您生活愉快!
第2个回答  2010-09-19
倒数第7行 有错误 定义的是i 不是y (int s=1,i;)
我看了一下 你的代码 你的不完善 如果是2进制 只能表达从(1—255)之间的数。 如果是三进制 也只能表达(0—19682)之间的数。本回答被提问者采纳
第3个回答  2010-09-19
#include <stdio.h>
#define N 2
int main()
{
long long int n,k = 0,z = 1;
scanf("%lld",&n);
while (n > 0)
{
k += n % N * z;
n /= N;
z *= 10;
};
printf("%lld\n",k);
return 0;
}
第4个回答  2010-09-19
十进制转二进制,知道算法就很简单啊~~
你想问什么,能否具体点?
第5个回答  2010-09-19
调用函数怎么形参有一个y
函数体内又定义一个y
相似回答
大家正在搜