第一次作全英文編程題(詞彙量嚴重不足,還需多記單詞);編程
題目的大體意思就是說:輸入一個不超過20位的整數,將這個數乘以2,比較計算前和計算後的結果是否知足題目的要求,數組
這個要求具體是指判斷組成這兩個數的具體數字出現的次數是否相等,例如:這個數爲123456789,它乘以2以後獲得246913578,函數
組成這兩個數的數字爲一、二、三、四、五、六、七、八、9,而且他們在123456789和246913578中出現的次數相等,因此知足題目的要求。spa
#include<stdio.h> void printArray(int nums[],int len); int main() { //因爲數字的位數比較長就算使用long long型,位數仍是不夠用 //因此須要用字符串來存儲用戶輸入的數字 char str[20]; //字符串轉換爲的數組,存儲用戶輸入的整型數字 int nums[20]; //原有的數組乘以2,存儲數字計算後的結果 int nums1[20]; //用於判斷計算先後的數字特徵是否一致 //也就是計算先後每一個數字出現的次數是否同樣 int a[10] = {0}; int b[10] = {0}; //定義循環變量 int i = 0, j = 0; //定義數組長度,最後的判斷標誌 int len = 0, flag = 0; //接收用戶輸入的字符串 scanf("%s",str); //經過循環,每一位數字都乘以2,獲得計算後的結果 while(str[i]!='\0'){ nums[i] = str[i]-'0'; nums1[i] = nums[i]*2; i++; len++; } //判斷計算後的數組是否有進位 //若是有進位,則須要調整數組 for(i = len-1; i >= 1;i--) { if(nums1[i] >= 10){ nums1[i] = nums1[i] - 10; nums1[i-1] = nums1[i-1] + 1; } } //最簡單的一種狀況 //計算先後位數不一樣,直接否認 if(nums1[0] >= 10){ printf("No\n"); printArray(nums1,len); } //計算先後位數相同,比較各個數字出現的次數是否相同 else{ //統計計算前的數組中0~9出現的次數 for(i = 0; i < len; i++){ for(j = 0;j < 10; j++){ if(nums[i] == j) a[j]++; } } //統計計算後的數組中0~9出現的次數 for(i = 0; i < len; i++){ for(j = 0; j < 10 ; j++){ if(nums1[i] == j) b[j]++; } } //最後判斷a,b兩數組是否徹底相同 //相同 ==> Yes //不一樣 ==> No for(i = 0; i < 10; i++){ if(a[i] != b[i]){ flag = 1; break; } } if(flag == 0) printf("Yes\n"); else printf("No\n"); printArray(nums1,len); } return 0; } //封裝了一個用於打印數組的函數 void printArray(int nums[],int len) { int i = 0; for(i = 0; i < len; i++) { printf("%d",nums[i]); } printf("\n"); }