题目1125:大整数的因子 C++/Java

题目描述:

已知正整数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

题目1125:大整数的因子 C++/Java的相关文章

13:大整数的因子

13:大整数的因子 查看 提交 统计 提问 总时间限制:  1000ms 内存限制:  65536kB 描述 已知正整数k满足2<=k<=9,现给出长度最大为30位的十进制非负整数c,求所有能整除c的k. 输入 一个非负整数c,c的位数<=30. 输出 若存在满足 c%k == 0 的k,从小到大输出所有这样的k,相邻两个数之间用单个空格隔开:若没有这样的k,则输出"none". 样例输入 30 样例输出 2 3 5 6 查看 提交 统计 提问 #include<

AC日记——大整数的因子 openjudge 1.6 13

13:大整数的因子 总时间限制:  1000ms 内存限制:  65536kB 描述 已知正整数k满足2<=k<=9,现给出长度最大为30位的十进制非负整数c,求所有能整除c的k. 输入 一个非负整数c,c的位数<=30. 输出 若存在满足 c%k == 0 的k,从小到大输出所有这样的k,相邻两个数之间用单个空格隔开:若没有这样的k,则输出"none". 样例输入 30 样例输出 2 3 5 6 思路: 模拟: 来,上代码: #include<cstdio&g

13:大整数的因子(NOIP)

/* 13:大整数的因子 总时间限制: 1000ms 内存限制: 65536kB 描述 已知正整数k满足2<=k<=9,现给出长度最大为30位的十进制非负整数c,求所有能整除c的k. 输入 一个非负整数c,c的位数<=30. 输出 若存在满足 c%k == 0 的k,从小到大输出所有这样的k,相邻两个数之间用单个空格隔开: 若没有这样的k,则输出"none". 样例输入 30 样例输出 2 3 5 6 */ #include <bits/stdc++.h>

题目:大整数乘法、除法,楼梯走法,数组中不同数字,超过一半数字(好)

大整数乘法,可以用单个数字想乘,跟踪进位信息来处理. 大整数除法,可以先把除数增大到跟被除数相同的量级,然后累计相减.比如 555 / 3,就先把3增大到300,555能够减1次,那么结果+100,被除数变成255,依次进行. 楼梯走法:一次走一级,或者走两级.没什么难度. 数组中不同数字:如果是2n+1数组找出不同的那个数字,用异或就可以. 如果是找出超出一般数目的数字,用遍历,看到不一样的,就一起删除,这样的方式. 上网搜了一下,找出了更好的方法: 用变量记录备选数字,一个计数器记录该数字剩

1171:大整数的因子

传送门:http://ybt.ssoier.cn:8088/problem_show.php?pid=1171 [题目描述] 已知正整数k满足2≤k≤9,现给出长度最大为30位的十进制非负整数c,求所有能整除c的k. [输入] 一个非负整数c,c的位数≤30. [输出] 若存在满足 c%k == 0 的k,从小到大输出所有这样的k,相邻两个数之间用单个空格隔开:若没有这样的k,则输出"none". [输入样例] 30 [输出样例] 2 3 5 6 虽然可以直接根据关系求出但我还是用高精

大整数的因子

总时间限制:  1000ms 内存限制:  65536kB 描述 已知正整数k满足2<=k<=9,现给出长度最大为30位的十进制非负整数c,求所有能整除c的k. 输入 一个非负整数c,c的位数<=30. 输出 若存在满足 c%k == 0 的k,从小到大输出所有这样的k,相邻两个数之间用单个空格隔开:若没有这样的k,则输出"none". 样例输入 30 样例输出 2 3 5 6 代碼實現: 1 #include<cstdio> 2 #include<

大整数因子(高精mod)

大整数的因子 总时间限制:  1000ms 内存限制:  65536kB 描述 已知正整数k满足2<=k<=9,现给出长度最大为30位的十进制非负整数c,求所有能整除c的k. 输入 一个非负整数c,c的位数<=30. 输出 若存在满足 c%k == 0 的k,从小到大输出所有这样的k,相邻两个数之间用单个空格隔开:若没有这样的k,则输出"none". 样例输入 30 样例输出 2 3 5 6 代码 高精模运算 #include<iostream> #inc

大整数相乘问题总结以及Java实现

最近在跟coursera上斯坦福大学的算法专项课,其中开篇提到了两个整数相乘的问题,其中最简单的方法就是模拟我们小学的整数乘法,可想而知这不是比较好的算法,这门课可以说非常棒,带领我们不断探索更优的算法,然后介绍可以通过使用分而治之的思想来解决这个问题.下面对该问题的方法以及实现进行介绍. 问题定义 输入:2个n位的整数x和y 输出:x * y 如求: 1234567891011121314151617181*2019181716151413121110987654 的结果 求解该问题要注意的是

求两个大整数相乘的积,数字长度在127个字符之内。

计算两个大整数相乘的结果,数字不是double类型能表示的,数字长度没有限制(最大127位). 方法一:使用java中的大整数处理库函数,java.math.BigInteger,java.math.BigDecimal; 方法二:不利用库函数,自己实现其功能,可以练习自己对待复杂问题的处理能力,提高编程水平. 此代码中利于两者的结合,利于库函数可以看自己编写的代码的正确性. 1.主函数 import java.math.BigDecimal; import java.util.Scanner;