zoukankan      html  css  js  c++  java
  • pku 1001 Exponentiation

    http://poj.org/problem?id=1001 题目就是 大整数乘法的问题,只不过给的这个数是一个小数,但好在这是一个求幂的,即使有小数,只要把小数的位置标记一下,把原有的字符串转换为整数,等输出时在真确位置输出小数点即可

    本来想拿这道题目再练习一下乘法呢,真没想到自己这么的弱,不是忘了这就是忘了那,考虑的一点都不周全,脑子进水了

    View Code
      1 #include<stdio.h>
    2 #include<string.h>
    3 #include<iostream>
    4 using namespace std;
    5 #define N 10000
    6 char str[N],sbr[N];
    7 char temp[N];
    8 int a[N],b[N],c[N];
    9 int n;
    10 double r;
    11 int ca()
    12 {
    13 int i,j;
    14 int len = strlen(str);
    15 for(i = len - 1, j = 0;i >= 0; i--, j++)
    16 {
    17 a[j] = str[i] - '0';
    18 b[j] = str[i] - '0';
    19 }
    20 int len1,len2;
    21 len1 = len2 = len;
    22 while(n--)
    23 {
    24 memset(c,0,sizeof(c)); // 清零
    25 for(i = 0; i < len1; i++)
    26 {
    27 for(j = 0; j < len2 ;j++)
    28 {
    29 c[i + j] += (a[i] * b[j]);
    30 if(c[i+j] > 9)
    31 {
    32 c[i + j + 1] += (c[i + j] / 10); // 处理进位时注意
    33 c[i + j] %= 10;
    34 }
    35 }
    36 }
    37 if(c[len1 + len2]) len = len1 + len2;
    38 else len = len1 + len2 - 1;
    39 for(i = 0; i <= len ; i++)
    40 {
    41 a[i] = c[i];
    42 temp[i] = c[i] + '0';
    43 }
    44 //cout<<temp<<endl;
    45 len1 = len + 1;
    46 }
    47 return len;
    48 }
    49 void chang()
    50 {
    51 int i;
    52 int len = strlen(sbr);
    53 int j = 0;
    54 /*for(i = len - 1; i >= 0; i--)
    55 {
    56 if(sbr[i] - '0') break;
    57 }
    58 sbr[i+1] = '\0';
    59 len = strlen(sbr);
    60 //cout<<sbr<<" "<<len<<endl;*/
    61 for(i = 0; i < len; i++)
    62 {
    63 if(sbr[i] != '.') str[j++] = sbr[i];
    64 }
    65 }
    66 int main()
    67 {
    68 int i;
    69 while(cin>>sbr>>n)
    70 {
    71 n--;
    72 memset(a,0,sizeof(a));
    73 memset(b,0,sizeof(b));
    74 memset(str,0,sizeof(str));
    75 memset(c,0,sizeof(c));
    76 int flag = 0;
    77 if(r == -1 && n == -1) break;
    78 int len;
    79 len = strlen(sbr);
    80 for(i = len-1; i >= 0; i--)
    81 {
    82 if(sbr[i] == '.') {flag = 1;break;} // 判定是否有小数点
    83 }
    84 //cout<<i<<" "<<len<<endl;
    85 /*if(flag)
    86 {
    87 for(i = len - 1; i >= 0; i--)
    88 {
    89 if(sbr[i] - '0') break;
    90 }
    91 sbr[i + 1] = '\0';
    92 len = strlen(sbr);*/
    93 int tmp = 0;
    94 if(i == -1) // 如果没有则直接计算即可
    95 {
    96 strcpy(str,sbr);
    97 }
    98 else
    99 {
    100 for(i = len - 1; i >= 0; i--) // 如果有小数点要注意把给定的数后面的零去除掉
    101 {
    102 if(sbr[i] - '0') break;
    103 }
    104 sbr[i + 1] = '\0';
    105 len = strlen(sbr);
    106 for(i = len - 1; i >= 0; i--)
    107 {
    108 if(sbr[i] == '.') break;
    109 }
    110 tmp = (n + 1) * (len - i - 1); // 小数点后面应该有多少位
    111 chang();
    112 }
    113 ca();
    114 //cout<<tmp<<endl;
    115 int tt = strlen(temp);
    116 i = N - 1;
    117 while(!a[i] ) // 去除前导零,要注意不要处理到小数点后面
    118 {
    119 if(i == tmp - 1) break;
    120 i--;
    121 if( i == -1) break;
    122 }
    123 //cout<<i<<endl;
    124 if(i == -1) cout<<"1\n";
    125 else
    126 for(; i >= 0;i--)
    127 {
    128 if(i == tmp - 1 && flag) cout<<".";
    129 cout<<a[i];
    130 }
    131 cout<<endl;
    132 }
    133 return 0;
    134 }




  • 相关阅读:
    centos 安装 Lamp(Linux + Apache + PHP) 并安装 phpmyadmin
    mysql常用内置函数-查询语句中不能使用strtotime()函数!
    Windows下 wamp下Apache配置虚拟域名
    thinkphp ajax调用demo
    phpMailer 手册
    wampServer2.2 You don't have permission to access /phpmyadmin/ on this server.
    打印对象
    最全的CSS浏览器兼容问题
    html 视频播放器
    C语言入门-结构类型
  • 原文地址:https://www.cnblogs.com/fxh19911107/p/2410415.html
Copyright © 2011-2022 走看看