做题用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函数,但是就出现上述问题。求解。

#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个字节,你输入的数超出范围了。

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

#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;
} 

 

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

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

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

#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;
}

这个代码,就无误了。