我有一个字符串,其大小可以大到“10,000”。我必须计算那些能被 9 整除的子序列。
子序列:子序列是保持给定字符串的字符顺序的排列。例如:如果给定字符串是 10292,那么它的一些子序列是 1、102、10、19、12、12(12 是 2 的两倍)、129、029、09、092 等。有些数字不是给定字符串的子序列是:201(2 和 0 不能在 1 之前)、921、0291 等。
我尝试使用位移生成给定字符串的所有子序列(powerset),并检查每个字符串是否可被 9 整除。但只要字符串的长度<=10,这就可以正常工作。之后,我没有得到正确的子序列(一些子序列显示为负数)。
下面是我的代码:
scanf("%s", &str); //input string
int n=strlen(str); //find length of string
//loop to generate subsequences
for(i=1;i<(1<<n);++i){
string subseq;
for(j=0;j<n;++j){
if(i&(1<<j)){
subseq+=str[j]; // generate subsequence
}
}
//convert generated subseq to int; number is 'long' tpye
number=atol(subseq.c_str());printf("%ld\n", number);
//ignore 0 and check if number divisible by 9
if(number!=0&&number%9==0)count++;
}
printf("%ld\n", count);