国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

藍(lán)橋杯-矩陣翻硬幣

2019-11-10 22:56:35
字體:
供稿:網(wǎng)友

做這道題,首先是要理解清楚題目意思。沒有理解清楚題目中給出的i*x,j*y是沒法做題的。

兩條主線: 1.對于點(diǎn)(x, y),要求對行數(shù)凡是x的倍數(shù)的行進(jìn)行一次翻轉(zhuǎn),對列數(shù)凡是y的倍數(shù)的列進(jìn)行一次翻轉(zhuǎn) 2.要關(guān)注到題目后面給出的“數(shù)據(jù)規(guī)模和約定”,給定的范圍比較大,需要做一定的處理 一個主意: 對于10*1000這樣龐大的數(shù)據(jù)類型,要么會用到數(shù)組去存儲一個數(shù),要么就一定會涉及到優(yōu)化…

http://blog.csdn.net/misdom_tian_ya/article/details/44459827 這個是詳解的思路

java的優(yōu)勢在于:Java中自帶了BigInteger類,可以在一定程度上比較好的處理大數(shù)問題。

import java.math.BigInteger;import java.util.Arrays;import java.util.Scanner;public class Main { public static void main(String[] args) { // TODO Auto-generated method stub Scanner cin = new Scanner(System.in); String s1 = cin.next(); String s2 = cin.next(); BigInteger ans1 = BigSqrt(s1); BigInteger ans2 = BigSqrt(s2); //System.out.iply(ans2); System.out.println(ans); } private static BigInteger BigSqrt(String s) { int mlen = s.length(); //被開方數(shù)的長度 int len; //開方后的長度 BigInteger beSqrtNum = new BigInteger(s);//被開方數(shù) BigInteger sqrtOfNum; //存儲開方后的數(shù) BigInteger sqrtOfNumMul; //開方數(shù)的平方 String sString;//存儲sArray轉(zhuǎn)化后的字符串 if(mlen%2 == 0) len = mlen/2; else len = mlen/2+1; char[] sArray = new char[len]; Arrays.fill(sArray, '0');//開方數(shù)初始化為0 for(int pos=0; pos<len; pos++){ //從最高開始遍歷數(shù)組,每一位都轉(zhuǎn)化為開方數(shù)平方后剛好不大于被開方數(shù)的程度 for(char num='1'; num<='9'; num++){ sArray[pos] = num; sString = String.valueOf(sArray); sqrtOfNum = new BigInteger(sString); sqrtOfNumMul = sqrtOfNum.multiply(sqrtOfNum); if(sqrtOfNumMul.compareTo(beSqrtNum) == 1){ sArray[pos]-=1; break; } } } return new BigInteger(String.valueOf(sArray)); }}

其他做法:

#include<stdio.h>#include<stdlib.h>#include<string.h>#define MAXN 1100char n[MAXN];char m[MAXN];int sqrtn_ans[MAXN];int sqrtm_ans[MAXN];int mul_ans[MAXN];int temp1[MAXN];int Sqrt(int ans[],char n[]);int compare(int a[],int b[],int len1,int len2);int mul(int ans[],int a[],int b[],int len1,int len2);int add(int ans[],int b[],int len1,int len2);int main(){ int len1,len2,ansLen,i; scanf("%s%s",n,m); memset(sqrtn_ans,0,sizeof(sqrtn_ans)); memset(sqrtm_ans,0,sizeof(sqrtm_ans)); len1=Sqrt(sqrtn_ans,n); len2=Sqrt(sqrtm_ans,m); memset(mul_ans,0,sizeof(mul_ans)); ansLen=mul(mul_ans,sqrtn_ans,sqrtm_ans,len1,len2); for(i=ansLen-1;i>=0;i--) printf("%d",mul_ans[i]); printf("/n"); return 0;}//求大數(shù)的平方根,先將字符串?dāng)?shù)組轉(zhuǎn)換成整型數(shù)組,然后在求平方根,運(yùn)算結(jié)果保存在ans中,//函數(shù)返回運(yùn)算結(jié)果的位數(shù)int Sqrt(int ans[],char n[]){ int len=strlen(n),ansLen,mulLen,i,j; if(len%2==0) ansLen=len/2; else ansLen=len/2+1; int *num=(int *)malloc(sizeof(int)*len); //將字符串?dāng)?shù)組轉(zhuǎn)換成整型數(shù)組 for(i=0,j=len-1;i<len;i++,j--) num[j]=n[i]-'0'; for(i=ansLen-1;i>=0;i--) { int flag; memset(temp1,0,sizeof(temp1)); mulLen=1; while((flag=compare(temp1,num,mulLen,len))==-1) { ans[i]++; mulLen=mul(temp1,ans,ans,ansLen,ansLen); } if(flag==1) ans[i]--; else if(flag==0) break; } return ansLen;} //高精度*高精度乘法運(yùn)算,數(shù)組a和b中存放兩個操作數(shù),a的長度為len1,b的長度為len2,//運(yùn)算結(jié)果保存在ans中,函數(shù)返回運(yùn)算結(jié)果的位數(shù)int mul(int ans[],int a[],int b[],int len1,int len2){ int i,j; memset(ans,0,sizeof(int)*MAXN); for(i=0;i<len1;i++) { for(j=0;j<len2;j++) { ans[i+j]+=a[i]*b[j]; } } for(i=0;i<len1+len2;i++) { ans[i+1]+=ans[i]/10; ans[i]=ans[i]%10; } for(i=len1+len2;i>=0;i--) { if(ans[i]) break; } return i+1;}//比較兩個操作數(shù)的大小,若相等則返回0,否則若a>b,返回1,a<b,返回-1.int compare(int a[],int b[],int len1,int len2){ if(len1>len2) return 1; else if(len1<len2) return -1; else if(len1==len2) { int i; for(i=len1-1;i>=0;i--) { if(a[i]>b[i]) return 1; else if(a[i]<b[i]) return -1; } } return 0;}
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 雷波县| 双牌县| 霍山县| 铜山县| 谷城县| 拉萨市| 灌南县| 贵阳市| 当涂县| 宁明县| 古丈县| 新丰县| 什邡市| 长沙市| 内乡县| 盐城市| 唐山市| 博乐市| 那坡县| 定襄县| 瑞丽市| 朝阳区| 安化县| 同德县| 横峰县| 噶尔县| 五台县| 浑源县| 济源市| 来宾市| 金门县| 兴国县| 社旗县| 卢龙县| 桐柏县| 石楼县| 莲花县| 克拉玛依市| 乌苏市| 大新县| 兰考县|