Reverse Integer【易】

Reverse Integer

翻转一个整数

难度:易

例子:

Example1: x = 123, return 321
Example2: x = -123, return -321 

 

没甚麽好说的,直接上代码;

class Solution {
public:
    int reverse(int x) {
        int i, j, k = 0;
        int iResult = 0;
        int flag = -1;
        int iTemp = x;
        
        while(1)
        {
            if(iTemp / 10 == 0)
            {
                break;   
            }
            iTemp /= 10;
            k ++;
        }
        
        k ++;
        //std::cout<<k<<std::endl;
        
        for(i = 1; i <= k; i ++)
        {
            if(x % 10 == 0 && flag == -1)
            {
                x /= 10;
                continue;   
            }
            if(x % 10 != 0)
                flag = i;
                
            if((iResult > 214748364 || (iResult == 214748364 && x % 10 >= 8)) || (iResult < -214748364 || (iResult == -214748364 && x % 10 >= 8)))
            {
                iResult = 0;
                break;	
            }
            iResult = iResult * 10 + x % 10;
            
            x /= 10;
            
            //std::cout<<"i= "<<i<<" "<<iResult<<std::endl;
        }
        
        return iResult;
        
    }
};


``` Clear["Global`*"] cp = 33.85 0.000000001; cs = 33.92 0.000000001; lp = 86.47 0.000001; ls = 85.16 0.000001; r1 = 0.03; r2 = 0.05; rp = 0.50; rs = 0.43; f = 95000; w = 2 Pi f; V = 48.8 0.9; Z1 = r1 + (I w lp + 1/(I w cp) + rp); Z2 = -rp - (I w lp - I w M); Z3 = (-I M w); Z4 = 2/(I w ce) + (I w M + rp + rs + I w ls); Z5 = -rs - (I w ls - I w M); Z6 = rl + (I w ls + rs + 1/(I w cs) + r2); values = {M -> 44.5*0.000001, ce -> 0.00019180962063004538`, rl -> 79.21626856036153`}; values1 = {i1 -> 3.742 - 0.000 I}; targetf[M_, ce_, rl_] := Evaluate[-((-V Z5^2 + V Z4 Z6)/( Z3^2 Z4 - 2 Z2 Z3 Z5 + Z1 Z5^2 + Z2^2 Z6 -Z1 Z4 Z6)) - (i1 /. values1)]; parentsnum = 5000; kid0num = 10000; ranges = {{44.5*10^-6, 44.51*10^-6}, {-10, Log[10, 2*10^-8]}, {1*10^-9, 10*10^-9}, {-13, Log[10, 1.5*10^-11]}, {60, 100}, {-6, Log[10, 1.5*10^-4]}}; LaunchKernels[16]; parentsDE = SortBy[ParallelMap[{Norm[ targetf[#1 + I #2, #3 + I #4, #5 + I #6] & @@ #], #} &, Table[{RandomReal[ranges[[1]]], 10^RandomReal[ranges[[2]]], RandomReal[ranges[[3]]], 10^RandomReal[ranges[[4]]], RandomReal[ranges[[5]]], 10^RandomReal[ranges[[6]]]}, {parentsnum}]], First]; (*初始化数据存储列表*) generationData = {}; Do[(*纯差分变异*) pairsDE = Table[RandomSample[Reverse[#] -> #, 3], {kid0num}] &@ Range@Length@parentsDE; kidDE = Select[(parentsDE[[#1, 2]] + RandomReal[{0.3, 0.7}] (parentsDE[[#2, 2]] - parentsDE[[#3, 2]])) & @@@ pairsDE, ranges[[1, 1]] <= #[[1]] <= ranges[[1, 2]] && 10^ranges[[2, 1]] <= #[[2]] <= 10^ranges[[2, 2]] && ranges[[3, 1]] <= #[[3]] <= ranges[[3, 2]] && 10^ranges[[4, 1]] <= #[[4]] <= 10^ranges[[4, 2]] && ranges[[5, 1]] <= #[[5]] <= ranges[[5, 2]] && 10^ranges[[6, 1]] <= #[[6]] <= 10^ranges[[6, 2]] &]; (*联合变异*)baseDE = Table[{RandomReal[ranges[[1]]], 10^RandomReal[ranges[[2]]], RandomReal[ranges[[3]]], 10^RandomReal[ranges[[4]]], RandomReal[ranges[[5]]], 10^RandomReal[ranges[[6]]]}, {kid0num}]; indexDE = RandomInteger[{1, 6}, {kid0num, 3}]; kidDE = MapThread[ ReplacePart[#1, Thread[#3 -> #2[[#3]]]] &, {kidDE, baseDE, indexDE}]; (*更新种群*)parentsDE = SortBy[Join[parentsDE, ParallelMap[{Norm[targetf @@ #], #} &, kidDE, Method -> "CoarsestGrained"]], First][[;; parentsnum]]; (*记录当前代数据*) AppendTo[generationData, Join[parentsDE[[1, 2]], {parentsDE[[1, 1]], Mean[First /@ parentsDE]}]];, {ii, 50}]; (*导出到Excel*) headers = {"M实部", "M虚部(\[Times]10^?)", "ce实部", "ce虚部(\[Times]10^?)", "rl实部", "rl虚部(\[Times]10^?)", "最优适应度", "平均适应度"}; Export["DE_Results.xlsx", Prepend[generationData, headers]]```最速梯度下降算法可以替换差分进化部分吗
03-27
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值