C语言编程:寻找特殊整数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言编程:寻找特殊整数相关的知识,希望对你有一定的参考价值。

请编写一个程序寻找一种特殊整数:一个 n 位的正整数等于其各位数字的n次方之和。

例如:407=4×4×4+0×0×0+7×7×7。所以407就是一个特殊数。

输入:
正整数的位数n(n<=6)。

输出:
所有此n位特殊数。每个数占一行。若不存在符合条件的特殊数,则输出提示:“No output.”;若存在,则从小到大进行输出。

说明:
假设输入为4,在4位整数中,有3个4位的特殊数,则输出格式为(输出中的1111、2222和9999并不是4位特殊数,只是格式样例):

1111
2222
9999

#include
#include
main()

long
int
a,b,c,d,e,p;
int
n,i,x;
scanf("%d",&n);
a=pow(10,n-1);
b=(pow(10,n))-1;
d=pow(10,i);
c=a;
for(c=a;c<=b;c++)

for(i=n-1;i>=0;i--)

x=(c/d)%10;
e=e+x*x*x;

printf("%d\n",e);
if(e==c)

printf("%ld\n",e);
p=1;


printf("no
output.\n");

不知道你的代码是不是这样的?你看看,然后你的i没有初始化,i的值是多少啊,函数是顺序执行,你的i好像在for(i=n-1;i>=0;i--)才被赋值了。但d已经被fuck了,所以x
=
(c/d)%10,c也被fuck了。。。后面的就都被fuck了。。
参考技术A 你写得一塌糊涂 给你重写一个吧
#include <stdio.h>
int pow(int x, int y)

int ret;
int i;
for(i=1,ret=1;i<=y;i++)

ret *= x;

return ret;

int main()

int top;
int buttom;
int n;
int i;
int j;
int a[6];
int tmp;
int sum;
int count;
printf("input n:\n");
scanf("%d", &n);
for(i=1,top=0;i<=n;i++)

top = top*10 + 9;

for(i=1,buttom=1;i<=n-1;i++)

buttom = buttom*10;

for(i=buttom,count=0;i<=top;i++)

for(j=0,tmp=i,sum=0;j<n;j++)

a[j] = tmp%10;
sum += pow(a[j],n);
tmp /= 10;

if(i==sum)

printf("%d\n",i);
count++;


if(count==0)

printf("No output\n");

return 0;
追问

你这个是C语言程序吗?
不是应该:int main() 吗?
不过答案是对的。。。

追答

前面定义个计算 整数幂运算的函数 pow
下面 有 int main()

参考技术B 定义那么多的int类型的变量这样写累吗?

特殊回文数

技术图片
题目:
123321是一个非常特殊的数,它从左边读和从右边读是一样的
输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n
输入一行,包含一个正整数n
按从小到大的顺序输出满足条件的整数,每个整数占一行
样例输入

52

样例输出

899998
989989
998899


代码如下:
import java.util.*;
public class _002SpecialPalindromeNumber {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        for (int i = 10000;i <1000000;i++){  //i的取值在五位数到六位数之间
            String str = Integer.toString(i); //将整型i转换为string类型
            char[] array = str.toCharArray();
            boolean flag = true;
            for (int j = 0,k = array.length - 1;j < array.length /2 ; j++,k--) {
                    if (array[j] != array[k]) {
                        flag = false;
                        break;
                    }
               }
                if (flag){
                    int sum = 0;
                    for (int r = 0 ; r < array.length ; r++){
                        sum += Integer.valueOf(array[r]) - 48;
                    }
                    if (sum == n) {
                        System.out.println(i);
                    }
                }
            }
        }
    }

知识点:
  • char数组和String类型的转换
String str="my string"; //创建一个字符串str
char[] chrCharArray; //创建一个字符数组chrCharArray
chrCharArray = str.toCharArray(); //将字符串变量转换为字符数组
str= String.valueOf(chrCharArray ); //将字符数组转换为字符串

转换关键在于以下两个方法:

      (1)String类的toCharArray()方法,将字符串转换为字符数组

       (2)String类的valueOf()方法,将char类型的数组转换为字符串

  • int类型转String类型

Integer.toString(int i) 和 String.valueOf(int i)方法


Integer类的toString方法:生成整数的十进制字符串并返回一个10进制整数的String对象
将该参数转换为有符号的十进制表形式,以字符串形式返回它

public static String toString(int i) {
    if (i == Integer.MIN_VALUE) //等于最小值直接返回最小值字符串,避免getChars方法遇到最小值发生错误
        return "-2147483648"; 
    //判断i的位数,若位负数增加1位用来保存符号位
    int size = (i < 0) ? stringSize(-i) + 1 : stringSize(i);
    char[] buf = new char[size];
    //将i转换位buf符号数组
    getChars(i, size, buf);
    //因为buf数组是在方法内部生成,其他地方不会有其引用,所以直接将其引用给String内部的value保存,用来初始化String
    return new String(buf, true);
}

String.valueOf(int i)其实是调用了Integer.toString(int i)方法


技术图片



























以上是关于C语言编程:寻找特殊整数的主要内容,如果未能解决你的问题,请参考以下文章

蓝桥杯C/C++语言每日一题特殊数的和

连续正整数的和 C语言 不知道如何处理这个细节

【跪求C语言 大神】删数问题。小弟实在走投无路。

递归(C语言)

数据结构C语言实现,寻找n个数字中的所有素数

c语言问题 找矩阵中的鞍点