2010-08-22 90 views
2

我想编写一个程序来查找通过键盘输入的任意数字的第一个和最后一个数字的总和。例如,我输入了52264.输出必须是5+4 = 9查找任意数字的第一个和最后一个数字的总和

是的,这是一个任务。

+0

5 + 4 = 9,而不是6 – MBennett 2010-08-22 06:24:52

+1

是本次作业? – 2010-08-22 06:25:03

+1

必须是功课。这还有什么可能是可行的? – 2010-08-22 06:28:31

回答

5

那么,最后一位数字很容易弄清楚,对吗?

int lastDigit = input % 10; 

至于第一个数字,我不知道最有效的方法来得到它。立即弹到我的脑海里首先想到的是:

int firstDigit = input; 
while (firstDigit >= 10) 
{ 
    firstDigit /= 10; 
} 

所以,用52264例如:

int lastDigit = 52264 % 10; // 52264 % 10 = 4 

int firstDigit = 52264; 
firstDigit /= 10; // 5226 
firstDigit /= 10; // 522 
firstDigit /= 10; // 52 
firstDigit /= 10; // 5 -- less than 10 
3
int n; 
cin >> n; 
int num1 = n % 10; 
int num2 = n; 
while (num2 >= 10) 
    num2 /= 10; 

cout << num1+num2 << endl; 
0

找出在输入的数字总位数,想这ñ

int temp = number; 
int n = 0; 

while(temp > 0) 
{ 
    temp /= 10; 
    n++; 
} 

然后

sum = number/(int)pow(10, n - 1) + number % 10; 
+0

当“temp”中的前导数字很容易获得时,最后一行是浪费。 – 2015-01-17 14:13:53

1

这应该工作。由于输入是一个数组,因此您只需要查看零元素和最后一个元素,然后将它们相加即可。

#include <stdio.h> 
#include <string.h> 
#define MAX_LENGTH 256 

int main() { 
    char number[MAX_LENGTH]; 
    int first, last, sum; 
    while (scanf("%s", number) == 1) { 
    first = number[0]; 
    last = number[strlen(number)-1]; 
    sum = atoi(&first) + atoi(&last); 
    printf("Sum = %d\n", sum); 
    } 
    return 0; 
} 

下面是一个运行示例:

123456 
Sum = 7 
845731 
Sum = 9 
35846 
Sum = 9 
23 
Sum = 5 
11 
Sum = 2 
2

一种不同的方法可用于治疗的输入作为一个字符串。

char buf[BUFSIZ]; 
char *p; 
char bufTemp1[2]; 
char bufTemp2[2]; 
int sum; 

fgets(buf, sizeof(buf), stdin); 
if ((p = strchr (buf, '\n')) != NULL) 
{ 
    *p = '\0'; 
} 

bufTemp1[0] = buf[0]; 
bufTemp1[1] = '\0'; 

strncpy (bufTemp2, &buf[strlen(buf)-1], 1); 
bufTemp2[1] = '\0'; 

sum = atoi (bufTemp1) + atoi (bufTemp2); 
+0

比让'scanf'从字符串表示转换为整数然后努力从整数中检索数字要好得多。做和撤消。在这种情况下,即使'atoi'也是矫枉过正。 – 2015-01-17 15:30:12

1
#include <iostream> 
using namespace std; 
int main() 
{ 
    int sum=0; 
    int first,last; 
    int n; 
    cin>>n; 

    first=n %10; 
    while (n!=0) 
    { 
     last=n/10; 
    } 
    sum=first+last; 
    cout<<sum<<endl; 

} 
1

一个更有效的方式去这样做是要找到位数事先,像这样:

uint32_t digitCount = number == 0 ? 0 : (uint32_t)(log10(abs(number))) + 1; 

从那里,找到第一个进程,最后的数字被简化了。

0

这里是该程序:

/*program to find the sum of first and last digits of a given number */ 
#include <stdio.h> 

int main(void) 
{ 
int firstdigit,lastdigit,number,sum; 

printf("Enter the number whose sum of first and last digit to be found: \n\n"); 
scanf("%d",&number); 

if (number >=10) 
{ 
firstdigit = number; 
while (firstdigit >= 10) 
firstdigit /=10; /*firstdigit=firstdigit/10 which will neglect mantissa part;*/ 
lastdigit = number % 10; 

sum = firstdigit + lastdigit; 

printf("The sum of first=%d and last=%d digit is %d\n",firstdigit,lastdigit,sum); 
} 

else 
{ 
printf("wrong input given\n"); 
} 
return 0; 
} 
0
printf("%d\n", input[0] - '0' + input[strlen(input)-1] - '0'); 
0
b = int(raw_input()) 
c = str(b) 
d = int(c[0]) 
e = int(c[-1]) 

print d+e 
相关问题