请教一个C语言的问题

发布于 2021-11-30 07:34:43 字数 953 浏览 805 评论 17

@学PHP的小蚂蚁 你好,想跟你请教个问题:

1.       输入n(正整数,2位数),计算n的n次方的后3位数字。

#include <stdio.h>
#include <math.h>
main()
{
    int  n=0, a, b, c;
    float z=0;
    printf("请输入一个两位整数:n");
    scanf("%d", &n);
    z = pow (n,n);
    a =  z/100%10;
    b = z/10%10;
    c = z%10;
    printf("%lfn", z);
    printf("%d%d%d",a,b,c);
    return 0;
}

这是我编的一个代码,我想请教的是后三位的那个问题怎么解决,我的abc三个用z不能整除的?

谢谢!!!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(17

断爱 2021-12-01 12:43:53
/**
     * @param num1
     * @param num2
     * @param c    +     -     *     /      ^  (加  减  乘  除  幂)
     * @return result
     */
    public static String getBigNumCalculate(String num1, String num2, char c) {
        BigDecimal b1 = new BigDecimal(num1);
        BigDecimal b2 = new BigDecimal(num2);
        BigDecimal result = null;
        switch (c) {
        case '+':
            result = b1.add(b2);
            break;
        case '-':
            result = b1.subtract(b2);
            break;
        case '*':
            result = b1.multiply(b2);
            break;
        case '/':
            result = b1.divide(b2);
            break;
        case '^':
            int i = Integer.parseInt(num2);
            if (i>=1) {
                for (int k = 0; k < i-1; k++) {
                    b1 = b1.multiply(b2);
                }
            }
            result = b1;
            break;
        default:
            break;
        }
        if (result == null) {
            return "";
        } else {
            return result.toString();
        }

    }

疑心病 2021-12-01 12:43:53

这就是我之前说的大数运算,里面实际算法比较复杂

瑾兮 2021-12-01 12:43:52

这个输入16以上就都是000了

把昨日还给我 2021-12-01 12:43:51

回复
get intput is :16 cacul result is:18446744073709551616.000000 get str is:18446744073709551616.000000 without point . is:18446744073709551616 point . index is:20 last three value is:616

傾城如夢未必闌珊 2021-12-01 12:43:50

回复
我这边运行正常的啊,

一人独醉 2021-12-01 12:43:49

回复
我刚运行了下,我这个程序输入16是正常的,但是输入17就计算的不准确了,我也不知道为什么...

静谧 2021-12-01 12:43:48

这题就不能用pow,数值太大了

静谧 2021-12-01 12:43:45
#include<stdio.h>
#include<math.h>
#include<string.h>

int main(){

	int a=0;
	double n=0;

	printf("double size is:%ldn",sizeof(n));

	printf("please input an int value:n");
	scanf("%d",&a);

	printf("get intput is :%dn",a);

	if(a>100){
		printf("n");
		printf("-------------------------------n");
		printf("the input value must be <100!!!n");
		printf("-------------------------------n");
		printf("n");
		return -1;
	}


	n=pow(a,a);

	printf("cacul result is:%lfn",n);


	char str[512];
	int j=0;
	for(j=0;j<256;j++){
		str[j]='a';
	}

	sprintf(str,"%lf",n);
	printf("get str is:%sn",str);


	printf("without point . is:");
	int index=0;
	int i=0;
	for(i=0;i<256;i++){
		if((str[i]>='0')&&(str[i]<='9'))
			printf("%c",str[i]);
		else{
				index=i;
				break;
		}
	}

	printf("n");
		
	printf("point . index is:%dn",index);

		
	if(index>=3){
		printf("last three value is:");
		int k=index-3;
		for(;k<index;k++)
				printf("%c",str[k]);
		printf("n");
	}else{
		int g=n;
		printf("last three value is:%dn",g);
	}

	return 0;
}

北笙凉宸 2021-12-01 12:43:40

回复
题目只要最后三位,高位溢出就溢出呗。如果真要把所有值都算出来,只能用大数运算了,复杂度和这个不是一个级别的。

能否归途做我良人 2021-12-01 12:43:35

回复
为什么我运行你这个程序不对呢?你输入一个10 试下

傾城如夢未必闌珊 2021-12-01 12:39:02

结果是000,没打全

无人问我粥可暖 2021-12-01 12:37:28

回复
已经修改好了

瑾夏年华 2021-12-01 12:36:10

回复
恩,现在是对的. 我用java也计算了下,结果和你的是一样的.你能看看我写的,为什么输入17开始就计算的不准确了呢?

瑾夏年华 2021-12-01 12:32:42
#include <stdio.h>

int main()
{
    unsigned int n, i, j;
    printf("integer: ");
    scanf("%d", &n);

    j = n;
    for (i = 1; i < n; i++) {
        j *= n;
        j %= 1000;
    }

    printf("%03drn", j);
}
命硬 2021-12-01 08:14:44

有道理

小情绪 2021-11-30 20:46:38

您好!谢谢您的回答。不过这个程序在我这只能运行11,还有while里面的东西我没懂什么意思?

带上头具痛哭 2021-11-30 19:31:10

z是一个float类型的数,其与int型的数运算的结果还是float型。而float类型不能求余。

试试下面的代码,是基于你的改的,效率比较低一点

#include <stdio.h>
#include <math.h>
int main()
{
    int  n=0;
    double z=0;
    printf("请输入一个两位整数:n");
    scanf("%d", &n);
    z = pow (n,n);
    while(z >= 1000){
    	z-=1000;
    }
    n = z;
    printf("%lfn", z);
    printf("%03d",n);
    return 0;
}

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文