- 题目描述:
-
已知正整数k满足2<=k<=9,现给出长度最大为30位的十进制非负整数c,求所有能整除c的k.
- 输入:
-
若干个非负整数c,c的位数<=30每行一个c,当c=-1时中止
(不要对-1进行计算!)
- 输出:
-
每一个c的结果占一行1) 若存在满足 c%k == 0 的k,输出所有这样的k,中间用空格隔开,最后一个k后面没有空格。
2) 若没有这样的k则输出"none"
- 样例输入:
-
30 72 13 -1
- 样例输出:
-
2 3 5 6 2 3 4 6 8 9 none
- 提示:
-
注意整数溢出问题不要对-1进行计算
C++代码:
#include<iostream> #include<string> #include<vector> using namespace std; int main() { string s; while(cin>>s&&s!="-1") { vector<int> ivec; for(int n=2;n<=9;++n) { int index=0; int temp; for(int i=0;i<s.size();++i) { temp=index*10+(s[i]-'0'); index=temp%n; } if(index==0) ivec.push_back(n); } if(ivec.empty()) cout<<"none"<<endl; else { cout<<ivec[0]; for(int i=1;i<ivec.size();++i) cout<<" "<<ivec[i]; cout<<endl; } } return 0; } /************************************************************** Problem: 1125 User: Carvin Language: C++ Result: Accepted Time:150 ms Memory:1520 kb ****************************************************************/
Java代码:
import java.util.Scanner; public class Main{ public static void main(String[] args){ String str; int i,j,k; //int array[]=new int[100]; Scanner cin=new Scanner(System.in); while(cin.hasNext()){ str=cin.nextLine(); boolean flag=false; char num[]=str.toCharArray(); int len=num.length; j=0; if('-'==(num[0])) break; //System.exit(1); for(k=2;k<=9;k++) { int temp; int index=0; for(i=0;i<len;i++) { temp=index*10+(num[i]-'0'); index=temp%k; } if(index==0) { //array[j++]=k; if(k==2) System.out.print(k); else System.out.print(" "+k); flag=true; } } if(!flag) System.out.print("none"); System.out.println(); } } } /************************************************************** Problem: 1125 User: Carvin Language: Java Result: Accepted Time:150 ms Memory:1520 kb ****************************************************************/
时间: 2024-10-31 03:07:27