有一個問題:我應該掃描一個 300 位的數字并列印數字的總和,但我無法掃描它,long long int我不知道該怎么做。
uj5u.com熱心網友回復:
您可以使用以下命令將數字掃描為字串,fgets()甚至一次只掃描一個位元組getchar():
#include <stdio.h>
int main() {
int c;
int sum = 0;
while ((c = getchar()) != EOF) {
if (c >= '0' && c <= '9')
sum = c - '0';
else
break;
}
printf("sum: %d\n", sum);
return 0;
}
我你必須使用scanf(),這里有一個替代方案:
#include <stdio.h>
int main() {
char buf[2];
int sum = 0;
while (scanf("%1[0-9]", buf) == 1) {
sum = *buf - '0';
}
printf("sum: %d\n", sum);
return 0;
}
uj5u.com熱心網友回復:
#include <stdio.h>
int main()
{
char digit;
int sum = 0;
while ( scanf("%c", &digit) != EOF)
{
sum = digit - '0';
}
printf("sum: %d\n", sum);
return 0;
}
uj5u.com熱心網友回復:
在這種情況下,您需要輸入一個數字作為字串。
要輸入數字,您應該使用標準功能fgets。對應的字符陣列必須有 302 個字符:300 個字符表示數字,1 個字符'\n'表示函式附加fgets到輸入字串的換行符,1 個字符表示字串的終止零字符'\0'。
如果'\n'字串中不存在換行符,則表示用戶輸入了 300 個以上的字符。
用戶還可以輸入帶有前導或尾隨空格的數字。
您需要檢查輸入的字串是否包含有效數字。
這是一個演示程式。
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int is_valid_number( const char *number )
{
while ( isblank( ( unsigned char )*number ) ) number;
int valid = *number != '\0';
if ( valid )
{
while ( *number && '0' <= *number && *number <= '9' ) number;
while ( isblank( ( unsigned char )*number ) ) number;
valid = *number == '\0';
}
return valid;
}
int main( void )
{
enum { N = 300 };
char number[N 2] = { 0 };
printf( "Enter a non-negative number (no greater than %d digits): ", N );
fgets( number, sizeof( number ), stdin );
int valid = strchr( number, '\n' ) != NULL;
char *p = number;
if ( valid )
{
number[ strcspn( number, "\n" ) ] = '\0';
while ( isblank( ( unsigned char )*p ) ) p;
valid = is_valid_number( p );
}
if ( !valid )
{
puts( "Invalid number." );
}
else
{
unsigned int sum = 0;
for ( char *digit = p; *digit; digit )
{
sum = *digit - '0';
}
printf( "The sum of digits = %u\n", sum );
}
}
它的輸出可能看起來像
Enter a non-negative number (no greater than 300 digits): 1234567890123456789012345678901234567890
The sum of digits = 180
uj5u.com熱心網友回復:
最直接的解決方案似乎是重復讀取 1 位整數,并在有效時將它們相加。
一位數可以輕松讀入 int(不再需要),即使 300 位數字之和也不會超過 int。
#include <stdio.h>
int main()
{
int digit=0;
int sum=0;
while(1==scanf("",&digit))sum =digit;
printf("sum:%d\n", sum);
return 0;
}
誠然(感謝 chqrlie 指出)期望行結束,因為它帶有例如在線編譯器或法官的測驗輸入。在互動式提示中
...一行數字是不夠的,需要一個帶有 ^D 的明確檔案結尾。
uj5u.com熱心網友回復:
您可以使用 char 來掃描每個數字。也以這種方式,您不需要字串。在此處輸入圖片說明
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/368824.html
