C++中計算範圍內僅包含非零數字且數字和為N且能被M整除的數字個數
我們提供了兩個數字START和END來定義一個數字範圍。目標是在範圍[START,END]中找到所有沒有數字0且數字和等於給定數字N的數字。此外,這些數字可以被M整除。
我們將透過遍歷從START到END的數字來實現這一點,並對每個數字,我們將使用while迴圈計算其數字的和(僅當所有數字都不為零時)。如果此和等於N並且數字可以被M整除,則增加計數。
讓我們透過示例來理解。
輸入
START=1 END=100 N=9 M=6
輸出
Numbers with digit sum N and divisible by M: 4
解釋
Numbers 18, 36, 54, 72 have digit sum=9 and divisible by 6. None has 0 as a digit.
輸入
START=100 END=200 N=10 M=2
輸出
Numbers with digit sum N and divisible by M: 4
解釋
Numbers 118, 136, 154, 172 have digit sum=10 and divisible by 2. None has 0 as a digit.
下面程式中使用的演算法如下
我們獲取整數START、END、N和M。
函式digitSum(int start, int end, int n, int m)返回數字和=n且能被m整除且所有數字都不為零的數字的個數。
將初始變數count設定為0,表示此類數字的個數。
將變數digsum設定為0。
將變數flag設定為0。
使用for迴圈遍歷數字範圍。i=start到i=end
現在對於每個數字num=i,如果num%m==0(能被m整除),則繼續執行。
使用while迴圈檢查數字是否>0。並找到數字。
digit=num%10。如果digit不為零,則計算digsum+=digit。將num=num/10減少以新增下一個數字。如果任何數字為0,則將flag=0並中斷while迴圈。
在while迴圈結束時,檢查是否( digsum == n and flag==1 )。如果是,則增加count。
現在將i增加m(以m的倍數增加)。
在所有迴圈結束時,count將包含滿足條件的數字總數。
返回count作為結果。
示例
#include <bits/stdc++.h> using namespace std; int digitSum(int start, int end, int n, int m){ int count = 0; int digsum = 0; int flag=0; for (int i = start; i <= end; i++){ int num=i; digsum=0; flag=0; if(num%m==0){ while(num>0){ int digit=num%10; if(digit==0){ flag=0; break; } digsum+=num%10; //sum of digits num=num/10; flag=1; } if(digsum==n && flag==1) //original number is i { count++; cout<<i<<" "; } i+=m; //now increment in multiples of m i--; // for loop has i++ } } return count; } int main(){ int START = 1; int END = 100; int N = 9; int M = 6; cout <<"Numbers with digit sum N and divisible by M: "<<digitSum(START,END,N, M); return 0; }
輸出
如果我們執行以上程式碼,它將生成以下輸出:
Numbers with digit sum N and divisible by M: 4
廣告