qq_53169656
2021-05-31 16:18
采纳率: 100%
浏览 60

做题用pow函数出现点问题,准确说是整型和浮点型数据有点混乱

/*
求Sn=a+aa+aaa+aa...a(n个a),其中a是一个数字,n表示a的位数,n由键盘输入
*/
#include<stdio.h>
#include<math.h>
int main()
{
    int Sn=0,a,n,i;
    printf("输入a、n的值:\n");
    scanf("%d%d",&a,&n);
    for(i=1;i<=n;i++)
        {
            a=(pow((float)10,i)-1.0)/9.0*a;
            Sn+=a;
        }
    printf("Sn=%d",Sn);
    return 0;
}

运行结果:输入2_1,2_2时,Sn=2和Sn=4(正确的),输入2_3,Sn=2466,输入2_4,Sn=2715528(之后都是错误的)

书上的方法是用a*10,然后不断循环,我想用pow函数,但是就出现上述问题。求解。

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

5条回答 默认 最新

  • 答题大神 2021-05-31 16:22
    已采纳
    #include<stdio.h>
    #include<math.h>
    int main()
    {
        int a,t,n,i;
        printf("输入a、n的值:\n");
        scanf("%d%d",&a,&n);
        double Sn=0.0;
        for(i=1;i<=n;i++)
            {
                a=(pow(10,(float)i)-1.0)/9.0*a;
                Sn+=a;
            }
        printf("Sn=%.0lf",Sn);
        return 0;
    }

    int类型在c语言中是2个字节,你输入的数超出范围了。

    1 打赏 评论
  • 套你的猴子 2021-05-31 16:21

    我有个思路,也是解决你这个问题的可以给你参考下

    1 打赏 评论
  • 套你的猴子 2021-05-31 16:33
    #include "stdio.h"
    int main()
    {
    	//Sn=a+aa+aaa+aaaa``````
    	
    	int S,n;
    	int result,a,b,i;
    	char ch;
    	do{
    		printf("请输入两个整数S与n:");
    		scanf("%d %d",&S,&n);
    		for(result=0,a=1,b=0,i=1;i<=n;i++){
    			b+=S*a;
    			a*=10;
    			result+=b;
    			//printf("result=%d,b=%d\n",result,b);
    		}
    		printf("结果为%d\n",result);
    		fflush(stdin);
    		printf("输入n结束,任意键继续:");
    		ch=getchar();
    	}while(ch!='n');
    	return 0;
    } 
    1 打赏 评论
  • 有问必答小助手 2021-05-31 16:30

    您的问题已经有小伙伴解答了,请点击【采纳】按钮,采纳帮您提供解决思路的答案,给回答的人一些鼓励哦~~

    ps:开通问答VIP,享受5次/月 有问必答服务,了解详情↓↓↓

    【电脑端】戳>>>  https://vip.csdn.net/askvip?utm_source=1146287632
    【APP 】  戳>>>  https://mall.csdn.net/item/52471?utm_source=1146287632

    打赏 评论
  • 答题大神 2021-05-31 16:34
    #include<stdio.h>
    #include<math.h>
    int main()
    {
        int a,t,n,i;
        printf("输入a、n的值:\n");
        scanf("%d%d",&a,&n);
        double Sn=0.0;
        for(i=1;i<=n;i++)
        {
            t=t*10+a;
    		Sn+=t;
        }
        printf("Sn=%.0lf",Sn);
        return 0;
    }

    这个代码,就无误了。

    打赏 评论

相关推荐 更多相似问题