zoukankan      html  css  js  c++  java
  • 【高精度】大整数的因子

    题目相关

    【题目描述】

    已知正整数k满足2≤k≤9,现给出长度最大为30位的十进制非负整数c,求所有能整除c的k。

    【输入】

    一个非负整数c,c的位数≤30。

    【输出】

    若存在满足 c%k == 0 的k,从小到大输出所有这样的k,相邻两个数之间用单个空格隔开;若没有这样的k,则输出"none"。

    【输入样例】

    30

    【输出样例】

    2 3 5 6

    分析

    本题考查的高精度除法。求出c除k的余数,余数为0则输出k。并且计算过程中只有被除数是高精度大数,而除数是个整数型的数字。

    for(int k=2;k<=9;k++){
        if(c MOD k ==0){
            cout<<k<<" ";
        }
    }
    

    在过程中我们可以模拟竖式计算的过程来实现。除法计算时,是从高位开始,取出一位位的数字依次和除数相除,有余数,则将余数和下一位数字组成新的数继续相除,直到所有数的用完为止。

    int res=0;//余数
    int newNum=0;//组成的新数
    for(int i=0;i<len;i++){
        newNum=res*10+c[i];
        res=newNum%k;//计算余数
        ans[i]=newNum/k;//计算商
    }
    

    代码实现

    #include <iostream>
    #include <cstring>
    using namespace std;
    
    int numMod(char s[],int k){
    	int c[35]={0};
    	int len=strlen(s);
    	for(int i=0;i<len;i++){
    		c[i]=s[i]-'0';
    	}
    	int res=0;
    	int newNum=0;
    	for(int i=0;i<len;i++){
    		newNum=res*10+c[i];
    		res=newNum%k;
    	}
    	return res;
    }
    
    int main(){
    	char C[35]={0};
    	bool flag=false;
    	cin>>C;
    	for(int k=2;k<=9;k++){
    		if(numMod(C,k)==0){
    			flag=true;
    			cout<<k<<" ";
    		}
    	}
    	if(!flag){
    		cout<<"none";
    	}
    	return 0;
    }
    

    视频链接

    链接

    源码

    源码上传至Git仓库中,欢迎star!

    Fork Me on Gitee

    Fork Me on GitHub

    Fork me on Gitee

    不积硅步,无以至千里。
  • 相关阅读:
    Verilog杂谈
    Hadoop家族学习路线图
    R语言中apply函数
    R语言数组array函数
    R语言列表list函数
    R语言多元素向量
    R语言提取字符串的一部分substring函数
    R语言改变大小写 toupper()和 tolower()函数
    R语言统计字符串的字符数ncahr函数
    R语言格式化数字和字符串format函数
  • 原文地址:https://www.cnblogs.com/wyloving/p/14188792.html
Copyright © 2011-2022 走看看