计算 1到10的n次方的范围中 含有 a数字(小于10)的个数和 能被a整出的 个数和。(求高手指点 我觉得我这个办法很笨 代码也不优)

来源:互联网 发布:linux tomcat7 log4j 编辑:程序博客网 时间:2024/05/15 19:37

昨天看见有朋友问到这个问题,就动手写了写一个很笨的算法,希望有人来 探讨下,我是自学的C++刚学的菜鸟 



#include<iostream>#include<vector>using namespace std;class Arithmetics{public :int arithmetics(int inum);void PowerOperation(int n);private:int pn;//安全起见 最好保护};/*power operation 10的 n幂数求得*/void Arithmetics::PowerOperation(int n){int inumber = 1;while(n--)inumber = inumber * 10;pn = inumber;}/*算法:找出数字*/int Arithmetics::arithmetics(int inum){int count = 0;int temp ,temp1, temp2, flag;flag = inum;//传递 需要求的包含是数字比如7,即求的是包含7这个数字,和能被7整除的 数vector<int> iver;temp1 = temp2 = temp = 0;//这个我感觉定义了 比较好表达 具体我也说不出 for (int i = 1; i< pn;i ++){if (i>10){temp1 =temp2 = temp = i ;while (temp1 > 10){if (temp1 = temp1 /10){if ( (temp1 == flag)||(temp1%10 ==flag))//判断是否含有要包含数字比如7的个数{iver.push_back(i);}}if ((temp2 >0 )){temp2 = temp2%10;if ( temp2 == flag){iver.push_back(i);}}}} if (((i % 7) == 0)){iver.push_back(i);}}for (vector<int>:: iterator iiter = iver.begin();iiter != iver.end();iiter++){count++;cout<<*iiter<<endl;for (vector<int>:: iterator iiter1 = iiter+1;iiter1 != iver.end();iiter1++){if(*iiter == *iiter1)//帅选出相同的元素{cout<<"     "<<*iiter<<endl;//打印下相同的元素++iiter;//通过偏移指针 选出。}}}cout<<count<<endl;return count;}int main(){int flag, n;cout<<"输入要计算包含数字(小于10的数字 用 回车键 隔开输出的第二个数字)"<<" 输入计算1~10的多少次方 "<<endl;cin >> flag>>n;class Arithmetics A;A.PowerOperation(n);A.arithmetics(flag);while(1);//方便查看调试信息 设置的等待


原创粉丝点击