这是小弟我用递归法写的计算一个整数的位数,和个位数字之和,编译成功,可是结果总是不对,尤其当输出的数字过大的时候,还输出负数。自学中吗,还请多多指教
这是我用递归法写的计算一个整数的位数,和个位数字之和,编译成功,可是结果总是不对,尤其当输出的数字过大的时候,还输出负数。自学中吗,还请多多指教
#include<stdio.h>
int num(int n)
{
if(n/10<1)
return 1;
else
return( 1+num(n/10));
}
int sum(int n)
{
if(n/10<1)
return n;
else
return ((n%10)+ num(n/10));}
int main()
{ int n;
scanf("%d",&n);
printf("num=%d\nsum=%d",num(n),sum(n));
getchar();getchar();}
------解决方案--------------------
别用int或者long,大小有限制,用字符串吧,多长都行(不超过MAX_LEN就行)
#include<stdio.h>
int num(int n)
{
if(n/10<1)
return 1;
else
return( 1+num(n/10));
}
int sum(int n)
{
if(n/10<1)
return n;
else
return ((n%10)+ num(n/10));}
int main()
{ int n;
scanf("%d",&n);
printf("num=%d\nsum=%d",num(n),sum(n));
getchar();getchar();}
------解决方案--------------------
别用int或者long,大小有限制,用字符串吧,多长都行(不超过MAX_LEN就行)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LEN 500
long compute(char s[],int n)
{
if (n>0)
{
return (s[n-1]-'0')+compute(s,n-1);
}
else
{
return 0;
}
}
int main()
{
int num, len;
char s[MAX_LEN];
printf("Please input a number:\n");
scanf("%s",&s);
len = strlen(s);
printf("Sum is %ld\n",compute(s,len));
return 0;
}